EF Core中的DB First與Code First


前言:

大家都習慣在程序中生成對應的model來對數據庫進行操作,所以如何快速的生成數據庫表的對應model,是基礎之一。總結了一下在我的認知中大概是這個結構:

 

 

Db first方式:

先創建好對應的數據庫通過數據庫來生成對應的Model。                             

1 創建數據庫

大家可根據自己的需要生成對應的數據庫,這里只做演示所以使用官方給的SqlServer數據庫腳本:

CREATE DATABASE [Blogging];

GO

 

USE [Blogging];

GO

 

CREATE TABLE [Blog] (

    [BlogId] int NOT NULL IDENTITY,

    [Url] nvarchar(max) NOT NULL,

    CONSTRAINT [PK_Blog] PRIMARY KEY ([BlogId])

);

GO

 

CREATE TABLE [Post] (

    [PostId] int NOT NULL IDENTITY,

    [BlogId] int NOT NULL,

    [Content] nvarchar(max),

    [Title] nvarchar(max),

    CONSTRAINT [PK_Post] PRIMARY KEY ([PostId]),

    CONSTRAINT [FK_Post_Blog_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [Blog] ([BlogId]) ON DELETE CASCADE

);

GO

 

INSERT INTO [Blog] (Url) VALUES

('http://blogs.msdn.com/dotnet'),

('http://blogs.msdn.com/webdev'),

('http://blogs.msdn.com/visualstudio')

GO

執行完了之后看一下效果:

  

表結構(極其簡單):

 

 

需要的數據庫創建完畢!

2 生成對應Model

在.net core核心包中已經包含了ef關於sqlserver的包,所以不需要導入任何包即可,如果你使用別的數據庫則安裝對應的包即可。在控制台中執行:

其中-OutputDir "Models"只將生成的文件放在Models中。

沒什么問題,可以正常用了。

Code First方式:

先寫好對應的Model,然后創建到數據庫。

1 創建Model類

根據自己的需求寫好類:

 

因為偷懶,所以只寫了一個類。。。

2 創建DbContext

個人把DbContext理解為一個中控類,可以通過它來對數據庫進行操作,這個可能理解有誤。直接上圖:

 

比較簡單哈,把記得所有實體類都加進去就ok啦。

3 字段限制

3.1 特性限制

在正常的數據庫中我們會對字段加許多的限制,比如長度最長為x,不可為空,設置主鍵等等。如果我們使用特性來進行約束那應該是這樣的:

 

這樣的話看上去比較混亂,用大佬們的話來說可能是職責不單一?應該是。總之這樣是不好的。

 

3.2 Fluent API限制

所以我們要在DbContext中對字段進行限制,ef core有一套叫Fluent API的東西,比較方便,上圖:

 

在OnModelCreating中加上限制之后和使用特性限制的效果是一致的。

 

3.3 限制類限制

但是當你的一個表字段比較多並且限制和表關系也非常多的時候,OnModelCreating中就會有很多行,不方便閱讀,所以有了限制類(我自己起的..)這個東西:

 

繼承於IEntityConfiguration,實現Configure方法,在這個方法中使用Fluent API進行限制就可以了,這樣每個表的限制對應一個類比較方便閱讀。

遷移命令

一種是使用CLI,一種是使用nuget,命令寫法不一樣而已,結果都一致。當然在這之前我們需要注入一下DbContext:

 

1 CLI方式:

在對應文件夾打開命令行執行dotnet ef migrations add name和dotnet ef database update 看結果:

 

我們需要的庫已經建立完成了。

 

2 Nuget方法:

在nuget中執行:add-migration name和update-database即可,結果都一樣不用看了。

 

遷移生成的文件介紹

第一次執行dotnet ef migrations add name時cli會自動創建migrations文件夾里面包含兩個文件。

 

MyDbContextModelSnapshot文件是快照文件,記錄第一次遷移時的數據庫結構,以日期命名的文件為修改文件,記錄每一次對數據庫修改了哪些地方,如果遷移之后更新數據庫之前發現還需要更改可以使用remove進行回滾。

具體回滾操作可使用:dotnet ef migrations remove

結語

只有在平時使用的時候,因為各種原因會遇到各種各樣的奇葩問題,這里就不列舉了,遇到的時候就得面向Search開發了,一般都是粗心錯誤,一般都能找到解決方案。

今天就先寫到這里,希望可以幫到大家,如果幫不到就算我記筆記了。。。

相關資料

FluentAPI文檔:https://www.learnentityframeworkcore.com/configuration/fluent-api

EFCore創建模型部分:https://docs.microsoft.com/zh-cn/ef/core/modeling/

官方案例:https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new-db?tabs=visual-studio


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM