目前EF Core 的最新版本為2.0.0-priview1-final
,所以這篇文章主要是針對此版本的一些說明。
注意:如果你要在Visual Studio 中使用 .NET Core 2.0 , 你需要至少 Visual Studio 2017 15.3 預覽版本。
相關mysql影片教學推薦:《mysql教學》
你可以透過以下指令來安裝或升級你目前的.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 文件 <ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0-preview1-final" /> </ItemGroup> // 或者通过以下命令 PM> update-package Microsoft.EntityFrameworkCore.Tools -Pre -Version 2.0.0-preview1-final
避免建立不必要的子查詢
一些指令會切換到客戶端進行執行
#只有少數請求才會擷取表格的所有欄位
#有事沒有適當的篩選條件,將單一LINQ 查詢轉換為N + 1 查詢。
在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;
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; } }在產生資料庫表格的時候,
Customer和
Address 將會產生為一個表格。
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 ); } }當透過直接查詢或導航屬性(
Include())查詢類型資料時,將會自動套用此篩選條件。當然你可以使用
IgnoreQueryFilters()來在查詢中停用此全域篩選器。
每個請求中都會建立一個新的實例。
在EF Core 2.0 中,引入了一種新的注入自訂DbContext的方式,它顯示的使用了一種實例池的方式來注入到容器。services.AddDbContextPool<BloggingContext>( options => options.UseSqlServer(connectionString));使用此方式的話,當Controller 請求DbContext 實例的時候,將會先檢查池中是否有可用的實例,一旦請求處理完成,附加到改實例上的任何狀態都會重置,然後實例會重新返回池中。 這個概念有點類似 ADO.NET 中的資料庫連線池,它有節省初始化 DbContext 執行個體成本的優點。很多ASP.NET Core 應用程式可以採用此方式來獲得效能上的提升。 手動編譯查詢在先前版本的EF 和Linq to SQL 中提供有可以手動或顯示的編譯查詢的API,它允許應用程式快取已經翻譯的查詢,這樣他們就可以只編譯一次,並且執行多次。 雖然EF Core 可以根據查詢表達式自動編譯和快取查詢,但是這種機制可以透過繞過雜湊計算或高速緩存來取得小幅的查詢效能提升,從而允許應用程式使用已經呼叫委託鏈編譯通過的查詢。
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 也將對一些記錄以及診斷的基礎架構進行一些比較大的調整,以及和 Azure Application Insights 的整合工作。 對於 Lazy Loading (延遲載入)功能的增加,目前還在討論當中,也許會在 EF Core 2.1 中加入此功能。
#
以上是EF Core 2.0 新特性的詳細內容。更多資訊請關注PHP中文網其他相關文章!