你的位置:首页 > 软件开发 > ASP.net > Entity Framework Core 1.1 Preview 1 简介

Entity Framework Core 1.1 Preview 1 简介

发布时间:2016-11-15 16:00:04
实体框架核心(EF Core)是Entity Framework的一个轻量级,可扩展和跨平台版本。 10月25日,Entity Framework Core 1.1 Preview 1发布了。 升级到Entity Framework Core 1.1 Preview 1 如果您使 ...

Entity Framework Core 1.1 Preview 1 简介

实体框架核心(EF Core)是Entity Framework的一个轻量级,可扩展和跨平台版本。 10月25日,Entity Framework Core 1.1 Preview 1发布了。

升级到Entity Framework Core 1.1 Preview 1

如果您使用由EF团队(SQL Server,SQLite和InMemory)提供的数据库提供程序之一,则只需升级提供程序包。

PM> Update-Package Microsoft.EntityFrameworkCore.SqlServer –Pre
如果您使用的是第三方数据库提供程序,请检查它们是否已发布依赖于1.1.0-preview1-final的更新。 如果他们有,那么只是升级到新版本。 如果没有,那么你应该只能升级它们依赖的EF Core关系组件。 1.1中的大部分新功能不需要更改数据库提供程序。 EF开发组做了一些测试,以确保依赖于1.0的数据库提供程序继续使用1.1预览1,但这个测试还不详尽。
 
PM> Update-Package Microsoft.EntityFrameworkCore.Relational –Pre

升级tooling packages

如果你使用的工具包,那么一定要升级。 请注意,工具版本化为1.0.0-preview3-final,因为工具尚未达到其初始稳定版本(在.NET Core,get='_blank'>ASP.NET Core和EF Core上的工具都是如此)。

PM> Update-Package Microsoft.EntityFrameworkCore.Tools –Pre
如果您使用的是ASP.NET Core,那么您需要更新project.json的tools部分以使用新的Microsoft.EntityFrameworkCore.Tools.DotNet包。 随着.NET CLI工具的设计的进行,我们必须将dotnet ef工具分离到这个单独的包中。
"tools": { "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview3-final"},

什么是Entity Framework Core 1.1 Preview 1

1.1版本专注于解决阻止人们采用EF Core的问题。 这包括修复错误并添加一些尚未在EF Core中实现的关键功能。 虽然EF开发组在这方面取得了一些良好的进展,但是,EF Core仍然不会是每个人的正确选择。 有关实现的更多详细信息,请参阅下面的EF Core和EF6.x比较。

EF Core和EF6.x比较

有两个版本的Entity Framework,Entity Framework Core和Entity Framework 6.x.

Entity Framework 6.x

Entity Framework 6.x(EF6.x)是一种经过试验和测试的数据访问技术,具有多年的功能和稳定性。 它首次在2008年发布,作为.NET Framework 3.5 SP1和Visual Studio 2008 SP1的一部分。 从EF4.1版本开始,它作为EntityFramework NuGet包发运 - 目前是NuGet.org上最受欢迎的包。

EF6.x继续是一个受支持的产品,并将继续进行错误修复和小的改进。

Entity Framework Core

实体框架核心(EF Core)是Entity Framework的一个轻量级,可扩展和跨平台版本。 与EF6.x相比,EF Core引入了许多改进和新功能。 同时,EF Core 是一个新的代码基础

EF Core保留了来自EF6.x的开发者体验,大多数顶级API也保持不变,因此EF Core对使用EF6.x的用户会感到非常熟悉。 同时,EF Core构建了一套全新的核心组件。 这意味着EF Core不会自动继承EF6.x的所有功能。 其中一些功能将在未来版本中显示(例如延迟加载和连接弹性),其他较不常用的功能将不会在EF Core中实现。

新的,可扩展的和轻量级核心还允许我们在EF核心中添加一些在EF6.x中不能实现的特性(例如在LINQ查询中的备用密钥和混合客户端/数据库评估)。

改进LINQ翻译

在1.1版本中,EF研发团队在改进EF Core LINQ提供程序方面取得了良好的进展。 这使得更多的查询能够成功执行,在数据库(而不是内存)中评估更多的逻辑。

DbSet.Find

DbSet.Find(...)是一个存在于EF6.x中的API,并且是EF Core的更常见的请求之一。 它允许您根据主键值轻松查询实体。 如果实体已经加载到上下文中,则返回它而不查询数据库。

using (var db = new BloggingContext()){  var blog = db.Blogs.Find(1);}

映射到字段(Mapping to fields)

API中的新的HasField(...)方法允许您为属性配置备用字段。 这是最常见的做法是当一个属性没有setter。

public class BloggingContext : DbContext{  ...  protected override void OnModelCreating(ModelBuilder modelBuilder)  {    modelBuilder.Entity<Blog>()      .Property(b => b.Url)      .HasField("_theUrl");  }}
默认情况下,EF将在查询期间构造实体的实例时使用该字段,或者当它无法使用该属性时(即,它需要设置值,但没有属性设置器)。 您可以通过新的UsePropertyAccessMode(...)API更改。
protected override void OnModelCreating(ModelBuilder modelBuilder){  modelBuilder.Entity<Blog>()    .Property(b => b.Url)    .HasField("_theUrl")    .UsePropertyAccessMode(PropertyAccessMode.Field);}

您还可以在模型中创建在实体类中没有相应属性的属性,但使用字段将数据存储在实体中。 这与“阴影属性”(下面介绍,距离此处12cm)不同,数据存储在更改**中。 如果实体类使用方法来获取/设置值,则通常使用此方法。

您可以在属性(...)API中给EF字段的名称。 如果没有具有给定名称的属性,则EF将寻找一个字段。

public class BloggingContext : DbContext{  ...  protected override void OnModelCreating(ModelBuilder modelBuilder)  {    modelBuilder.Entity<Blog>()      .Property("_theUrl");  }}
您还可以选择为该属性指定名称,而不是字段名称。 然后在创建模型时使用此名称,最明显的是它将用于映射到数据库中的列名称。
protected override void OnModelCreating(ModelBuilder modelBuilder){  modelBuilder.Entity<Blog>()    .Property<string>("Url")    .HasField("_theUrl");}
您可以使用EF.Property(...)方法在LINQ查询中引用这些属性。
var blogs = db.Blogs  .OrderBy(b => EF.Property<string>(b, "Url"))  .ToList();
 

阴影属性(Entity Framework Core)

阴影属性是实体类中不存在的属性。 这些属性的值和状态完全保留在更改**中

可以通过ChangeTracker API获取和更改阴影属性值。

context.Entry(myBlog).Property("LastUpdated").CurrentValue = DateTime.Now;
阴影属性可以通过EF.Property静态方法在LINQ查询中引用。
var blogs = context.Blogs  .OrderBy(b => EF.Property<DateTime>(b, "LastUpdated"));

阴影属性约定(Conventions Shadow Properties)

按照惯例,仅当发现关系时才创建阴影属性,但在从属实体类中找不到外键属性。 在这种情况下,将引入影子外键属性。 shadow外键属性将命名为<navigation property name><principal key property name>(在依赖实体上的导航,它指向主体实体,用于命名)。 如果主键属性名称包含导航属性的名称,则名称将只是<principal key property name>。 如果从属实体上没有导航属性,则在其位置使用主类型名称。

例如,以下代码清单将导致向Post实体引入BlogId shadow属性。

class MyContext : DbContext{  public DbSet<Blog> Blogs { get; set; }  public DbSet<Post> Posts { get; set; }}public class Blog{  public int BlogId { get; set; }  public string Url { get; set; }  public List<Post> Posts { get; set; }}public class Post{  public int PostId { get; set; }  public string Title { get; set; }  public string Content { get; set; }  public Blog Blog { get; set; }}

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:Entity Framework Core 1.1 Preview 1 简介

关键词:ie

ie
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。