EF Core 2.0 新特性

前言

目前 EF Core 的最新版本为 2.0.0-priview1-final,所以本篇文章主要是针对此版本的一些说明。

注意:如果你要在Visual Studio 中使用 .NET Core 2.0 , 你需要至少 Visual Studio 2017 15.3 预览版本。

相关mysql视频教程推荐:《mysql教程》

安装或升级到 EF Core 2.0

你可以通过以下命令来安装或者升级你目前的 .NET Core 版本。

// 安装PM> install-package Microsoft.EntityFrameworkCore.SqlServer -Pre -Version 2.0.0-preview1-final// 升级PM> update-package Microsoft.EntityFrameworkCore.SqlServer -Pre -Version 2.0.0-preview1-final

登录后复制

工具包

// 直接修改 CSPROJ 文件   // 或者通过以下命令PM> update-package Microsoft.EntityFrameworkCore.Tools -Pre -Version 2.0.0-preview1-final

登录后复制

EF Core 2.0 新功能

改进的 LINQ 翻译

避免创建不必要的子查询

一些命令将切换到客户端进行执行

只有少数请求才会检索表的所有列

有事没有适当的过滤条件,将单个LINQ 查询转换为 N + 1 查询。

EF.Functions.Like()

在 EF Core 2.0 中添加了 EF.Functions 属性,EF Core Provider 可以使用它们来自定义一些映射到数据库函数后者运算符的方法,以便于在 LINQ 查询中调用它们。如:

var aCustomers =    from c in context.Customers    where EF.Functions.Like(c.Name, "a%");    select c;

登录后复制

分离实体和表

分离实体和表什么意思呢?在以前,一个数据库表会映射到 EF 中的一个实体对象,也就是表和实体是一一对应的关系。那么在 2.0 版本中,允许映射一些关联的实体到一个表中,并且EF会维护这些实例或者引用关系。

modelBuilder.Entity()    .OwnsOne(c => c.WorkAddress);public class Customer{    public int CustomerId { get; set; }    public Address WorkAddress { get; set; }}public class Address{    public string Line { get; set; }    public string PostalOrZipCode { get; set; }    public string StateOrProvince { get; set; }    public string CityOrTown { get; internal set; }}

登录后复制

在生成数据库表的时候,Customer和 Address 将生成为一个表。

注意:priview1 中此功能暂不完整。

全局查询过滤

新版本引入了一个叫做“垂直过滤”的一个功能,这是一个比较常见的需求。

在我们定义EF Core上下文模型的时候,可以在模型创建的时候附加一些过滤条件,比如在查询的时候总是过滤掉一些“逻辑删除”的数据。

public class BloggingContext : DbContext{    public DbSet Blogs { get; set; }    public DbSet Posts { get; set; }    public int TenantId {get; set; }    protected override void OnModelCreating(ModelBuilder modelBuilder)    {        modelBuilder.Entity()            .HasQueryFilter(p => !p.IsDeleted &&                  p.TenantId == this.TenantId );    }}

登录后复制

当通过直接查询或者导航属性(Include())查询类型数据时,将会自动应用此过滤条件。当然你可以使用 IgnoreQueryFilters()来在查询中禁用此全局过滤器。

DbContext 连接池

通常在 ASP.NET Core 中使用 EF Core 会涉及到自定义的 DbContext,然后注入到系统容器中,再通过 Controller 的构造函数从容器中来获取该对象实例。这也就意味着在每个请求中都会创建一个新的实例。

在EF Core 2.0 中,引入了一种新的注入自定义DbContext的方式,它显示的使用了一种实例池的方式来注入到容器。

services.AddDbContextPool(    options => options.UseSqlServer(connectionString));

登录后复制

使用此方式的话,当 Controller 请求 DbContext 实例的时候,将会首先检查池中是否有可用的实例,一旦请求处理完成,附加到改实例上的任何状态都将会重置,然后实例会重新返回到池中。

这个概念有点类似 ADO.NET 中的数据库连接池,它具有节省初始化 DbContext 实例成本的优点。很多ASP.NET Core 应用程序可以采用此方式来获得性能上的提升。

手动编译查询

在以前版本的 EF 和 Linq to SQL 中提供有可以手动或者显示的编译查询的API,它允许应用程序缓存已经翻译的查询,这样他们就可以只编译一次,并且执行多次。

虽然 EF Core 可以根据查询表达式自动编译和缓存查询,但是这种机制可以通过绕过哈希计算或者高速缓存来获取小幅的查询性能提升,从而允许应用程序使用已经调用委托链编译通过的查询。

private static Func _customerById =    EF.CompileQuery((CustomerContext db, int id) =>        db.Customers            .Include(c => c.Address)            .Single(c => c.Id == id));...using (var db = new CustomerContext()){   var customer = _customerById(db, 147);}

登录后复制

其他

EF Core 2.0 还将对一些日志记录以及诊断的基础架构进行一些比较大的调整,以及和 Azure Application Insights 的整合工作。

对于 Lazy Loading (延迟加载)功能的增加,目前还在讨论当中,也许会在 EF Core 2.1 中添加此功能。

以上就是EF Core 2.0 新特性的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2494412.html

(0)
上一篇 2025年3月5日 01:51:32
下一篇 2025年2月25日 07:35:22

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • go语言有什么新特性

    go语言的新特性有:1、Go模块,用于管理Go语言项目的依赖关系;2、错误处理,增加了一个新的错误类型error,使得错误处理更加灵活和简洁;3、上下文包,用于在goroutine之间传递请求范围的值;4、嵌入,即一个结构体可以嵌入到另一个…

    2025年3月1日
    200
  • golang泛型的特点和限制:探索值得的新特性

    golang泛型的优势和限制:值得一试的新特性,需要具体代码示例 摘要:Golang是一种强类型的静态语言,一直以来,其缺乏泛型特性一直备受争议。然而,近期Golang开发团队正积极推进泛型特性的引入,以提供更高的代码复用性和可读性。本文将…

    2025年3月1日
    200
  • Go语言新特性解读:让编程更高效

    【Go语言新特性解读:让编程更高效,需要具体代码示例】 近年来,Go语言在软件开发领域备受关注,其简洁、高效的设计理念吸引了越来越多的开发者。作为一种静态类型的编程语言,Go语言不断推出新的特性以提高开发效率,简化代码编写过程。本文将深入解…

    2025年3月1日
    200
  • 掌握Go语言最新特性,迎接编程挑战

    Go语言作为一门高效、简洁、易学的编程语言,在软件开发领域备受关注。随着Go语言的不断发展,新的特性和功能不断被引入,为开发者们提供了更多的技术选择和优化方案。本篇文章将重点介绍Go语言最新的特性,为读者们提供具体的代码示例,帮助大家更好地…

    2025年3月1日
    200
  • golang 最新引入了哪些关键特性?

    go语言的最新关键特性包括:泛型,提高代码可重用性。误差处理改进,支持自定义错误类型。时区支持,简化跨时区工作。开发工具链改进,提供更快速的模块依赖解析。控制流改进,添加了fallthrough语句。 Go 语言中的最新关键特性 Go 语言…

    2025年3月1日
    200
  • Python 3.x 新特性及10大变化

    python 3.x 起始版本是python 3.0,目前的最新版本是 3.3.3 Python之父Guido van Rossum谈到了Python 3.0的构思: 一直以来,除非要打破向后兼容性,否则很多缺陷和错误都无法修复。因此,Py…

    编程技术 2025年2月28日
    200
  • numpy版本更新解读:新特性与改进的性能

    随着数据科学和深度学习的不断发展,Python作为主流的编程语言之一,其科学计算库numpy也在不断推陈出新。最近,numpy发布了新的版本,其中包含了一些新特性和性能改进。在这篇文章中,我们将深入探讨numpy的新版本,介绍其中一些重要的…

    2025年2月26日
    200
  • 了解PHP8中的新特性,让你的编程变得更加简单

    随着时间的推移,php编程语言也在不断的发展和完善。最新的php 8版本中,添加了许多新的功能和特性,这些功能可以提高开发人员的生产力,简化代码,增强代码的可读性和可维护性。在这篇文章中,我们将介绍php8中5个最重要的新特性。 JIT编译…

    编程技术 2025年2月25日
    200
  • PHP8的新特性为代码编写带来了革命性的变化

    php是一种被广泛使用的服务器端编程语言,由于其简单易用,适合大众的编程口味和在网站开发中的好处,php已成为许多网站的编程语言。 PHP 8 升级带来了一些重大变化,这些变化可以给开发者带来巨大的好处。下面是 PHP 8 最重要的新特性。…

    编程技术 2025年2月25日
    200
  • PHP8的新特性让编程变得更加高效

    php是一门广泛应用于web开发的编程语言,它具有易学易用、能够快速构建web应用、良好的扩展性以及开源等诸多优点,因此受到了众多开发者的青睐。而在最新的php8版本中,更加强调代码的规范性和简洁性,引入了大量新的特性并对现有特性进行了优化…

    编程技术 2025年2月25日
    200

发表回复

登录后才能评论