EFCore 的 DbFirst 模式
🚀 優質資源分享 🚀
| 🧡 Python實戰微信訂餐小程序 🧡 | 進階級 | 本課程是python flask+微信小程序的完美結合,從項目搭建到騰訊云部署上線,打造一個全棧訂餐系統。 |
| 💛Python量化交易實戰💛 | 入門級 | 手把手帶你打造一個易擴展、更安全、效率更高的量化交易系統 |
1 前言
EF6 時代,可以通過界面操作,添加數據庫實體。
EF Core 需要通過 CLI 來進行該操作,具體請參考EF Core官方文檔:反向工程。
2 前置條件
- PMC 工具(僅限 Visual Studio)或 CLI 工具。
- 核心 NuGet 包:Microsoft.EntityFrameworkCore.Design
- 還需要為要進行反向工程的數據庫架構安裝適當的數據庫提供程序
3 主命令
dotnet ef dbcontext scaffold "[數據庫連接串]" [提供程序]如:
dotnet ef dbcontext scaffold "server=localhost;database=efcore;uid=sa;pwd=Qwe123456;" Microsoft.EntityFrameworkCore.SqlServer4 命令參數
4.1 生成指定表(–table)
上述命令,會生成整個數據庫的表,如果需要指定特定的表,需要使用如下:
dotnet ef dbcontext scaffold "[數據庫連接串]" [提供程序] --table table_name1 --table table_name24.2 保留數據庫名稱(–use-database-names)
默認情況會修正表/列名,使用該參數盡量保留原名稱。
-UseDatabaseNames #PMC --use-database-names #.NET Core CLI4.3 Fluent API 和數據注釋(–data-annotations)
默認情況下,使用 Fluent API 配置實體類型。使用下面的命令,可以改為使用數據注釋。
-DataAnnotations #PMC --data-annotations #.NET Core CLIFluent API
entity.Property(e => e.Title).IsRequired().HasMaxLength(160);數據注釋
[Required] [StringLength(160)] public string Title { get; set; }4.4 指定 DbContext 名稱(–context)
指定將生成的 DbContext 類的名稱
-Context #PMC --context #.NET Core CLI4.5 指定保存目錄(–context-dir 和 --output-dir)
-ContextDir Data -OutputDir Models #PMC --context-dir Data --output-dir Models #.NET Core CLI4.6 指定命名空間(–namespace 和 --context-namespace)
-Namespace Your.Namespace -ContextNamespace Your.DbContext.Namespace #PMC --namespace Your.Namespace --context-namespace Your.DbContext.Namespace #.NET Core CLI5 測試
5.1 數據庫準備
由于是 DbFirst,所以這里我們先創建一個數據庫,名為 efcore
新建一張表 Test
CREATE TABLE [dbo].[Test]([Id] [uniqueidentifier] NOT NULL,[Name] [nvarchar](128) NULL,CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED ([Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]5.2 新建一個控制臺程序
這里命名為:DbFirstTest
mkdir DbFirstTest & cd DbFirstTest #新建文件夾DbFirstTest并切換至該目錄下 dotnet new console -f net6.0 #新建.NET6.0控制臺程序5.3 引入 Nuget 包
# 引入 EF Core 核心包 dotnet add package Microsoft.EntityFrameworkCore.Design -v 6.0.4 # 引入 SQL Server 提供程序 dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 6.0.45.4 執行 Scaffold 命令
在控制臺程序的根目錄下,執行命令(連接串請自行修改成自己的):
dotnet ef dbcontext scaffold "server=localhost;database=efcore;uid=sa;pwd=Qwe123456;" Microsoft.EntityFrameworkCore.SqlServer --data-annotations --context EfCoreContext --context-dir Data --output-dir Models–data-annotations:數據注釋在實體上
–context EfCoreContext:上下文指定命名為 EfCoreContext
–context-dir Data:上下文保存在根目錄的 Data 文件夾下
–output-dir Models:實體保存在根目錄的 Models 文件夾下
5.5 測試源碼
在 Program.cs 添加測試代碼:
using DbFirstTest.Data; using DbFirstTest.Models;EfCoreContext db = new EfCoreContext(); Test test = new Test() {Id = Guid.NewGuid(),Name = "Add" }; db.Tests.Add(test); db.SaveChanges(); Console.WriteLine("Add Successful!");在項目根目錄下,執行:
dotnet build #編譯 dotnet run #運行執行以后,可以看到,數據庫中添加了相應的記錄。
5.6 源碼
Gitee:https://gitee.com/lisheng741/testnetcore/tree/master/EFCore/DbFirstTest
Github:https://github.com/lisheng741/testnetcore/tree/master/EFCore/DbFirstTest
參考來源
EF Core官方文檔:反向工程
總結
以上是生活随笔為你收集整理的EFCore 的 DbFirst 模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微服务接口设计规范
- 下一篇: Access数据库重复记录删除器 V1.