EFCore2.0新特性是什么-創(chuàng)新互聯(lián)

這篇文章主要介紹了EF Core 2.0新特性是什么,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標(biāo)準(zhǔn)是產(chǎn)品質(zhì)量的保證,主要從事成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、成都品牌網(wǎng)站建設(shè)、網(wǎng)頁(yè)制作、做網(wǎng)站、建網(wǎng)站。創(chuàng)新互聯(lián)擁有實(shí)力堅(jiān)強(qiáng)的技術(shù)研發(fā)團(tuán)隊(duì)及素養(yǎng)的視覺(jué)設(shè)計(jì)專(zhuān)才。

前言

目前 EF Core 的最新版本為 2.0.0-priview1-final,所以本篇文章主要是針對(duì)此版本的一些說(shuō)明。

注意:如果你要在Visual Studio 中使用 .NET Core 2.0 , 你需要至少 Visual Studio 2017 15.3 預(yù)覽版本。

安裝或升級(jí)到 EF Core 2.0

你可以通過(guò)以下命令來(lái)安裝或者升級(jí)你目前的 .NET Core 版本。

// 安裝
PM> install-package Microsoft.EntityFrameworkCore.SqlServer -Pre -Version 2.0.0-preview1-final

// 升級(jí)
PM> update-package Microsoft.EntityFrameworkCore.SqlServer -Pre -Version 2.0.0-preview1-final

工具包

// 直接修改 CSPROJ 文件
<ItemGroup>
   <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" 
       Version="2.0.0-preview1-final" />
</ItemGroup>

// 或者通過(guò)以下命令
PM> update-package Microsoft.EntityFrameworkCore.Tools -Pre -Version 2.0.0-preview1-final

EF Core 2.0 新功能

改進(jìn)的 LINQ 翻譯
  • 避免創(chuàng)建不必要的子查詢

  • 一些命令將切換到客戶端進(jìn)行執(zhí)行

  • 只有少數(shù)請(qǐng)求才會(huì)檢索表的所有列

  • 有事沒(méi)有適當(dāng)?shù)倪^(guò)濾條件,將單個(gè)LINQ 查詢轉(zhuǎn)換為 N + 1 查詢。

EF.Functions.Like()

在 EF Core 2.0 中添加了 EF.Functions 屬性,EF Core Provider 可以使用它們來(lái)自定義一些映射到數(shù)據(jù)庫(kù)函數(shù)后者運(yùn)算符的方法,以便于在 LINQ 查詢中調(diào)用它們。如:

var aCustomers =
    from c in context.Customers
    where EF.Functions.Like(c.Name, "a%");
    select c;
分離實(shí)體和表

分離實(shí)體和表什么意思呢?在以前,一個(gè)數(shù)據(jù)庫(kù)表會(huì)映射到 EF 中的一個(gè)實(shí)體對(duì)象,也就是表和實(shí)體是一一對(duì)應(yīng)的關(guān)系。那么在 2.0 版本中,允許映射一些關(guān)聯(lián)的實(shí)體到一個(gè)表中,并且EF會(huì)維護(hù)這些實(shí)例或者引用關(guān)系。

modelBuilder.Entity<Customer>()
    .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; }
}

在生成數(shù)據(jù)庫(kù)表的時(shí)候,CustomerAddress 將生成為一個(gè)表。

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

全局查詢過(guò)濾

新版本引入了一個(gè)叫做“垂直過(guò)濾”的一個(gè)功能,這是一個(gè)比較常見(jiàn)的需求。

在我們定義EF Core上下文模型的時(shí)候,可以在模型創(chuàng)建的時(shí)候附加一些過(guò)濾條件,比如在查詢的時(shí)候總是過(guò)濾掉一些“邏輯刪除”的數(shù)據(jù)。

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    public int TenantId {get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Post>()
            .HasQueryFilter(p => !p.IsDeleted &&
                  p.TenantId == this.TenantId );
    }
}

當(dāng)通過(guò)直接查詢或者導(dǎo)航屬性(Include())查詢類(lèi)型數(shù)據(jù)時(shí),將會(huì)自動(dòng)應(yīng)用此過(guò)濾條件。當(dāng)然你可以使用 IgnoreQueryFilters()來(lái)在查詢中禁用此全局過(guò)濾器。

DbContext 連接池

通常在 ASP.NET Core 中使用 EF Core 會(huì)涉及到自定義的 DbContext,然后注入到系統(tǒng)容器中,再通過(guò) Controller 的構(gòu)造函數(shù)從容器中來(lái)獲取該對(duì)象實(shí)例。這也就意味著在每個(gè)請(qǐng)求中都會(huì)創(chuàng)建一個(gè)新的實(shí)例。

在EF Core 2.0 中,引入了一種新的注入自定義DbContext的方式,它顯示的使用了一種實(shí)例池的方式來(lái)注入到容器。

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

使用此方式的話,當(dāng) Controller 請(qǐng)求 DbContext 實(shí)例的時(shí)候,將會(huì)首先檢查池中是否有可用的實(shí)例,一旦請(qǐng)求處理完成,附加到改實(shí)例上的任何狀態(tài)都將會(huì)重置,然后實(shí)例會(huì)重新返回到池中。

這個(gè)概念有點(diǎn)類(lèi)似 ADO.NET 中的數(shù)據(jù)庫(kù)連接池,它具有節(jié)省初始化 DbContext 實(shí)例成本的優(yōu)點(diǎn)。很多ASP.NET Core 應(yīng)用程序可以采用此方式來(lái)獲得性能上的提升。

手動(dòng)編譯查詢

在以前版本的 EF 和 Linq to SQL 中提供有可以手動(dòng)或者顯示的編譯查詢的API,它允許應(yīng)用程序緩存已經(jīng)翻譯的查詢,這樣他們就可以只編譯一次,并且執(zhí)行多次。

雖然 EF Core 可以根據(jù)查詢表達(dá)式自動(dòng)編譯和緩存查詢,但是這種機(jī)制可以通過(guò)繞過(guò)哈希計(jì)算或者高速緩存來(lái)獲取小幅的查詢性能提升,從而允許應(yīng)用程序使用已經(jīng)調(diào)用委托鏈編譯通過(guò)的查詢。

private static Func<CustomerContext, int, Customer> _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 還將對(duì)一些日志記錄以及診斷的基礎(chǔ)架構(gòu)進(jìn)行一些比較大的調(diào)整,以及和 Azure Application Insights 的整合工作。

對(duì)于 Lazy Loading (延遲加載)功能的增加,目前還在討論當(dāng)中,也許會(huì)在 EF Core 2.1 中添加此功能。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享EF Core 2.0新特性是什么內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司,關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,遇到問(wèn)題就找創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司,詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、網(wǎng)站設(shè)計(jì)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前標(biāo)題:EFCore2.0新特性是什么-創(chuàng)新互聯(lián)
瀏覽路徑:http://www.muchs.cn/article10/ipcdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷(xiāo)推廣網(wǎng)站內(nèi)鏈、外貿(mào)建站、企業(yè)網(wǎng)站制作、ChatGPT、App開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)