实体框架(EF)Core是实体框架的轻量级,可扩展和跨平台版本,它是.NET的流行的对象/关系映射(O / RM)框架。
dotnet add package Microsoft.EntityFrameworkCore.SqlServer -V 2.0.0
这个版本的新功能是什么
以下是EF Core 2.0中最突出的一些新功能:
.NET标准2.0
EF Core现在针对新的.NET
Standard 2.0。后者定义了超过32,000个API的共享表面区域,它们跨.NET
Framework,.NET Core,Mono,Xamarin以及即将推出的通用Windows平台。使用.NET Standard 2.0,开发人员可以在各种平台,应用程序类型和设备上重用其代码和技能。
有关在每个平台上使用EF
Core 2.0的详细指导,请参阅我们的平台支持文档。
改进LINQ翻译
在多种情况下,查询在EF Core 2.0中更有效率。例如,我们增加了可以转换为SQL的模式数量,因此许多在以前版本中触发客户端评估的查询将不再在2.0中执行。
像查询运算符
您现在可以EF.Functions.Like()在LINQ查询中使用,如果需要,它将被转换为LIKE或在内存中进行评估。例如,以下查询:
var customers =
from c in context.Customers
where EF.Functions.Like(c.Name, "a%");
select c;
被翻译如下:
SELECT [c].[Id], [c].[Name]
FROM [Customers] AS [c]
WHERE [c].[Name] LIKE N'a%';
拥有的实体和表拆分
您现在可以定义“所有”或“子”实体,这些实体将其他实体中的属性进行分组,与在EF6中使用的复杂类型非常相似,但具有包含参考导航属性的功能。结合表分割,拥有的类型允许这两个实体自动映射到单个Customer表:
public class Customer
{
public int Id { get; set; }
public string Name {get; set;}
public PhysicalAddress Address { get; set; }
}
public class PhysicalAddress
{
public string StreetAddress { get; set; }
public Location Location { get; set; }
}
...
modelBuilder.Entity<Customer>()
.OwnsOne(c => c.Address);
全局查询过滤器
您现在可以在模型中指定自动应用于所有执行的查询中所有类型的实体的过滤器DbContext。例如OnModelCreating:
modelBuilder.Entity<Post>()
.HasQueryFilter(p => !p.IsDeleted);
此查询将仅返回未标记为已删除的帖子:
var blog = context.Blogs
.Include(b => b.Posts)
.FirstOrDefault(b => b.Id == id);
DbContext合并
许多ASP.NET Core应用程序现在可以通过将其DbContext类型的服务注册配置为使用预先创建的实例池来获得性能提升,从而避免为每个请求创建新实例的成本:
services.AddDbContextPool<BloggingContext>(
options => options.UseSqlServer(connectionString));
原始SQL方法中的字符串插值
使用C#字符串插入语法的以下SQL查询现在可以正确参数化:
var city = "Redmond";
using (var context = CreateContext())
{
context.Customers.FromSql(aaa@qq.com"
SELECT *
FROM Customers
WHERE City = {city}");
}
这将创建一个@p0
值为'Redmond'
SQL 的参数,如下所示:
SELECT *
FROM Customers
WHERE City = @p0
和更多
我们已经添加了一些更多的功能,如显式编译的查询,自包含的实体配置在代码优先和数据库标量函数映射(感谢Paul
Middleton做出了巨大的贡献!),我们修复了很多错误。
请查看我们的文档中的新功能的概述。
更多:
.Net Core 2.0正式版上线