efcore 实体配置_快速掌握EF Core使用技能
EF Core 基礎概念
概念
EF Core 全稱是Entity Framework Core,可使用 EF Core 開發(fā)面向 .NET Core 的應用,EF Core 同時支持在 Visual StudioVisual Studio for Mac 或 Visual Studio Code 等環(huán)境下開發(fā)。雖然EF CORO 同樣支持在Xamarin和.Net Native 上實現(xiàn)運行,但是存在運行限制,可能會影響EF Core處理的效率,暫不推薦使用。
技術(shù)大綱
Entity Framework (EF) Core 是輕量化、可擴展、開源和跨平臺版的常用 Entity Framework 數(shù)據(jù)訪問技術(shù)。
EF Core 可用作對象關系映射程序 (O/RM),這可以實現(xiàn)以下兩點:
使 .NET 開發(fā)人員能夠使用 .NET 對象處理數(shù)據(jù)庫。
無需再像通常那樣編寫大部分數(shù)據(jù)訪問代碼。
EF Core 支持多個數(shù)據(jù)庫引擎。
獲取 Entity Framework Core 運行時
舉例:安裝或更新 EF Core SQL Server 的途徑
三種途徑
NET Core CLI (控制臺命令行操作頁面可執(zhí)行)
執(zhí)行“dotnet add package Microsoft.EntityFrameworkCore.SqlServer”該指令
可以使用 -v 修飾符在 dotnet add package 命令中指明特定的版本。例如,若要安裝 EF Core 2.2.0 包,請將 -v 2.2.0 追加到命令中。
Visual Studio NuGet 包管理器對話框
從 Visual Studio 菜單中選擇“項目”>“管理 NuGet 包”
單擊“瀏覽”或“更新”選項卡
若要安裝或更新 SQL Server 提供程序,請選擇 Microsoft.EntityFrameworkCore.SqlServer 包并確認。
Visual Studio NuGet 包管理器控制臺
從 Visual Studio 菜單中選擇“工具”>“NuGet 包管理器”>“包管理器控制臺”
Install-Package Microsoft.EntityFrameworkCore.SqlServer
若要更新提供程序,使用 Update-Package 命令。
若要指定特定版本,可以使用 -Version 修飾符。例如,若要安裝 EF Core 2.2.0 包,請將 -Version 2.2.0 追加到命令中。
EF CORE 實操內(nèi)容
模型
對于 EF Core,使用模型執(zhí)行數(shù)據(jù)訪問。模型由實體類和表示數(shù)據(jù)庫會話的上下文對象DBContext構(gòu)成。上下文對象允許查詢并保存數(shù)據(jù)。
EF 支持以下模型開發(fā)方法:
從現(xiàn)有數(shù)據(jù)庫生成模型。
對模型手動編碼,使其符合數(shù)據(jù)庫。
創(chuàng)建模型后,使用 EF 遷移從模型創(chuàng)建數(shù)據(jù)庫。模型發(fā)生變化時,遷移可讓數(shù)據(jù)庫不斷演進。
EF 中的重要元素DBContext
DbContext是實體類和數(shù)據(jù)庫之間的橋梁,DbContext主要負責與數(shù)據(jù)交互,主要作用:
DBContext 包含所有實體映射到數(shù)據(jù)庫的實體集【DbSet】
DBContext 將LINQ TO Entities 查詢轉(zhuǎn)換成DBServer認識的SQL語句
DBContext跟蹤實體從數(shù)據(jù)庫中查詢出來后發(fā)生的修改變化
DBContext支持持久化數(shù)據(jù)庫
如下圖所示?
DBContext 詳細介紹
DBContext 實現(xiàn)上述功能,自然類體積較大,截取部分方法展示如下:
如下展示一段代碼以便更好理解:
using Microsoft.EntityFrameworkCore;using System.Collections.Generic;namespace Intro
{public class BloggingContext : DbContext
{public DbSet Blogs { get; set; }public DbSet 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 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) 從數(shù)據(jù)庫檢索實體類的實例。其中,where 和 Orderby 兩個方法并不執(zhí)行數(shù)據(jù)庫操作?這里重點說明一下,只有ToList 這個操作,才會真正去數(shù)據(jù)庫執(zhí)行查詢。
using (var db = new BloggingContext())
{
var blogs = db.Blogs
.Where(b => b.Rating > 3)
.OrderBy(b => b.Url)
.ToList();
}
保存數(shù)據(jù)
使用實體類的實例在數(shù)據(jù)庫中創(chuàng)建、刪除和修改數(shù)據(jù)。
using (var db = new BloggingContext())
{
var blog = new Blog { Url = "http://sample.com" };
db.Blogs.Add(blog);
db.SaveChanges();
}
EF O/RM 注意事項
雖然 EF Core 善長提取許多編程詳細信息,但還是有一些適用于任何 O/RM 的最佳做法,可幫助避免生產(chǎn)應用中的常見陷阱:
若要在高性能生產(chǎn)應用中構(gòu)建、調(diào)試、分析和遷移數(shù)據(jù),必須具備基礎數(shù)據(jù)庫服務器的中級知識或更高級別的知識。例如,有關主鍵和外鍵、約束、索引、標準化、DML 和 DDL 語句、數(shù)據(jù)類型、分析等方面的知識。
功能和集成測試:請務必盡可能嚴密地復制生產(chǎn)環(huán)境,以便:
查找僅在使用特定版本的數(shù)據(jù)庫服務器時才出現(xiàn)的問題。
在升級 EF Core 和其他依賴項時捕獲中斷性變更。例如,添加或升級 ASP.NET Core、OData 或 Automapper 等框架。這些依賴項可能以多種意外方式影響 EF Core。
通過代表性負載進行性能和壓力測試。某些功能的不成熟用法縮放性不佳。例如,多項集合包含內(nèi)容、大量使用延遲加載、對未編制索引的列執(zhí)行條件查詢、對存儲生成的值進行大規(guī)模更新和插入、缺乏并發(fā)處理、大型模型、緩存策略不充分。
安全評審:例如,連接字符串和其他機密處理、非部署操作的數(shù)據(jù)庫權(quán)限、原始 SQL 的輸入驗證、敏感數(shù)據(jù)加密。
確保日志記錄和診斷充足且可用。例如,適當?shù)娜罩居涗浥渲谩⒉樵儤擞浐?Application Insights。
錯誤恢復。為常見故障場景(如版本回退、回退服務器、橫向擴展和負載平衡、DoS 緩解和數(shù)據(jù)備份)準備應急計劃。
應用程序部署和遷移。規(guī)劃如何在部署過程中應用遷移;在應用程序啟動時執(zhí)行此操作可能會導致并發(fā)問題,并且對于常規(guī)操作,這所需的權(quán)限比必要權(quán)限更高。在遷移期間,使用暫存來輔助從錯誤中恢復。有關詳細信息,請參閱應用遷移。
生成的遷移的詳細檢查和測試。將遷移應用于生產(chǎn)數(shù)據(jù)前,應對其進行全面測試。若表中包含生產(chǎn)數(shù)據(jù),架構(gòu)的形狀和列類型就不能輕易更改。例如,在 SQL Server 上,對于映射到字符串和十進制屬性的列,nvarchar(max) 和 decimal(18, 2) 極少成為最佳類型,但這些是 EF 使用的默認值,因為 EF 不了解你的具體情況。
總結(jié)
以上是生活随笔為你收集整理的efcore 实体配置_快速掌握EF Core使用技能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试黑马程序员课后答案_软件测试课后
- 下一篇: list所有元素相加 python_Py