目前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));
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 新特性的詳細內容。更多資訊請關注PHP中文網其他相關文章!