概念git
EF Core 全稱是Entity Framework Core,可以使用 EF Core 開發面向 .NET Core 的應用,EF Core 同時支持在 Visual StudioVisual Studio for Mac 或 Visual Studio Code 等環境下開發。雖然EF CORO 一樣支持在Xamarin和.Net Native 上實現運行,可是存在運行限制,可能會影響EF Core處理的效率,暫不推薦使用。github
技術大綱sql
Entity Framework (EF) Core 是輕量化、可擴展、開源和跨平臺版的經常使用 Entity Framework 數據訪問技術。數據庫
EF Core 可用做對象關係映射程序 (O/RM),這能夠實現如下兩點:編程
EF Core 支持多個數據庫引擎。緩存
舉例:安裝或更新 EF Core SQL Server 的途徑安全
三種途徑服務器
NET Core CLI (控制檯命令行操做頁面可執行)架構
Visual Studio NuGet 包管理器對話框併發
Visual Studio NuGet 包管理器控制檯
模型
對於 EF Core,使用模型執行數據訪問。 模型由實體類和表示數據庫會話的上下文對象DBContext構成。 上下文對象容許查詢並保存數據。
EF 支持如下模型開發方法:
DbContext是實體類和數據庫之間的橋樑,DbContext主要負責與數據交互,主要做用:
DbSet<TEntity>
】以下圖所示
DBContext 是一個實現上述功能,天然類體積較大,截取部分方法展現以下:
以下展現一段代碼以便更好理解:
using Microsoft.EntityFrameworkCore; using System.Collections.Generic; namespace Intro { public class BloggingContext : DbContext { public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( @"Server=(localdb)\mssqllocaldb;Database=Blogging;Integrated Security=True"); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } public int Rating { get; set; } public List<Post> Posts { get; set; } } public class Post { public int PostId { get; set; } public string Title { get; set; } public string Content { get; set; } public int BlogId { get; set; } public Blog Blog { get; set; } } }
使用語言集成查詢 (LINQ) 從數據庫檢索實體類的實例。其中,where 和 Orderby 兩個方法並不執行數據庫操做 這裏重點說明一下,只有ToList 這個操做,纔會真正去數據庫執行查詢。
using (var db = new BloggingContext()) { var blogs = db.Blogs .Where(b => b.Rating > 3) .OrderBy(b => b.Url) .ToList(); }
使用實體類的實例在數據庫中建立、刪除和修改數據。
using (var db = new BloggingContext()) { var blog = new Blog { Url = "http://sample.com" }; db.Blogs.Add(blog); db.SaveChanges(); }
雖然 EF Core 善長提取許多編程詳細信息,但仍是有一些適用於任何 O/RM 的最佳作法,可幫助避免生產應用中的常見陷阱:
功能和集成測試:請務必儘量嚴密地複製生產環境,以便:
生成的遷移的詳細檢查和測試。 將遷移應用於生產數據前,應對其進行全面測試。 若表中包含生產數據,架構的形狀和列類型就不能輕易更改。 例如,在 SQL Server 上,對於映射到字符串和十進制屬性的列,nvarchar(max) 和 decimal(18, 2) 極少成爲最佳類型,但這些是 EF 使用的默認值,由於 EF 不瞭解你的具體狀況。
~~~~