目錄
1.簡介
2.先決條件
3.使用Dotnet CLI創建解決方案和項目框架
4.在DataAcess中創建模型和數據上下文
5.在WebApp中啟動數據庫
6.添加數據遷移功能
7.更改數據庫模型
在.NET 5中使用Entity Framework Core 5數據遷移進行項目的逐步瀏覽。數據遷移位于單獨的庫中,并且會自動進行部署。
我一直在想寫這個話題有一段時間了。我過去曾做過EF數據遷移的項目,但情況有所變化,它的庫依存關系也發生了變化。現在,繼續到現在,我將在.NET 5項目中以及EF Core 5(5.0.3)中進行此操作。
該博客的主要思想是您將使用Entity Framework編寫一個Web應用程序,不僅如此,您還希望該項目附帶一個數據遷移計劃。編寫應用程序時,數據庫可能會隨著時間的推移而發展,并且您希望在實時生產環境中優雅地逐步遷移數據庫。這就是EF數據遷移發揮作用的地方。本文將分多個步驟逐步指導您。跳過所有其他編碼方面,例如配置、編碼標準、驗證等,甚至實體框架建模,以使核心問題(數據遷移)更加清晰。
Microsoft允許從Visual Studio IDE模板或使用dotnet命令行(CLI)界面創建項目。在本文中,我們將通過dotnet CLI創建一個項目。此外,我們將使用Visual Studio Code而不是Visual Studio IDE,但是,用法僅限于編輯文件和瀏覽項目文件夾。所有構建和運行的應用程序都將通過dotnet CLI命令完成。這是一些先決條件:
我們將創建一個包含兩個項目的解決方案,主項目將通過一個空的Web模板生成,另一個項目是一個庫項目,其中包含我們的數據庫模型,上下文以及稍后的遷移文件。在這里,我們將通過命令提示符使用dotnet CLI命令執行此操作,或者您可以從Visual Studio Code打開終端
mkdir EFCoreMigrationcd EFCoreMigration
dotnet new sln
這將使用當前目錄的名稱創建一個解決方案文件,或者您可以使用參數-n指定解決方案文件的名稱:
dotnet new sln -n EFCoreMigration
dotnet new web -o WebAppdotnet new classlib -o DataAccess
要查看每個可用的項目模板,可以使用以下方法列出它們:
dotnet new -l
dotnet sln add WebAppdotnet sln add DataAccess
注意,如果不指定解決方案名稱,它將使用默認名稱(即當前目錄的名稱)。完整的命令可以像:
dotnet sln [solution name] add WebApp
或者,您也可以指定項目文件的完整路徑,例如:
dotnet sln [solution name] add WebApp\WebApp.csproj
dotnet add WebApp reference DataAccess
或者,您也可以指定項目文件的完整路徑:
dotnet add WebApp\WebApp.csproj reference DataAccess\DataAccess.csproj
在這里,我們使用實體框架的代碼優先方法。使用了非常基本的模型。
using System;namespace DataAccess
{public class Book{public int Id { get; set; }public string Name { get; set; }public string Description {get;set;}}
}
cd DataAccess dotnet new package Microsoft.EntityFrameworkCore -v 5.0.3
using System;
using Microsoft.EntityFrameworkCore;
namespace DataAccess
{public class DataContext: DbContext{public DbSet<Book> Books { get; set; }public DataContext(DbContextOptions options) : base(options){ }protected override void OnModelCreating(ModelBuilder modelBuilder){//Can add constraint, index, check, data type, and even data seed} }
}
dotnet build
dotnet new package Microsoft.EntityFrameworkCore.Sqlserver -v 5.0.3
using Microsoft.EntityFrameworkCore;
.......public void ConfigureServices(IServiceCollection services){services.AddDbContext<DataAccess.DataContext>(options =>options.UseSqlServer("Server=localhost;Database=EFCoreMigration;Trusted_Connection=True;"));}
UseSqlServer是Microsoft.EntityFrameworkCore.SqlServer中的擴展方法,要使用它,您需要在頂部添加using Microsoft.EntityFrameworkCore。該代碼將使用登錄的用戶帳戶連接到MS SQL Server的本地實例,并創建一個EFCoreMigration數據庫。
public void Configure(IApplicationBuilder app,IWebHostEnvironment env,DataAccess.DataContext dataContext)
{dataContext.Database.EnsureCreated();
dotnet run
public void Configure(IApplicationBuilder app,IWebHostEnvironment env,DataAccess.DataContext dataContext)
{dataContext.Database.EnsureCreated();if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseRouting();app.UseEndpoints(endpoints =>{endpoints.MapGet("/", async context =>{using var dataContext = context.RequestServices.GetService<DataAccess.DataContext>();await context.Response.WriteAsync($"Book Count : {dataContext.Books.Count()}");});});
}
到目前為止,我們已經在代碼中使用了Entity Framework,但是沒有數據遷移功能。在大多數項目中,數據庫可能會隨著時間的推移而發展,因此我們可能需要提出一種隨時間推移更改數據庫的策略。Entity Framework Core具有數據遷移功能,下面是實現此功能的一種方法。
dotnet tool install --global dotnet-ef --version 5.0.3
net core 依賴注入、這將允許我們運行dotnet ef?命令。
dotnet add Microsoft.EntityFrameworkCore.Design -v 5.0.3
using System;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.EntityFrameworkCore;namespace DataAccess
{public class DataContextFactory : IDesignTimeDbContextFactory<DataContext>{public DataContext CreateDbContext(string[] args){var builder = new DbContextOptionsBuilder<DataContext>();//this code will be never executed in runtime only in design timebuilder.UseSqlServer("Server=localhost;Database=EFCoreMigration;Trusted_Connection=True;");return new DataContext(builder.Options);}}
}
dotnet ef migrations add InitialSchema
它將創建包含三個文件的Migrations目錄:
InitialSchema?有兩個方法,Up和Down。當將遷移應用于數據庫時,將執行Up;當從數據庫中刪除遷移時,將執行Down。如果遷移應用到最新的遷移,則DataContextModelSnapshot包含數據庫模型的快照。因此,如果添加或刪除了新的遷移,則DataContextModelSnapshot.cs將被覆蓋。
dotnet run
啟用數據遷移后,下一個問題是必須對數據庫模型進行更改時該怎么做。當然,數據庫模型的變化范圍很大,而且并非所有變化都具有相同的復雜性。但是,對于常見的更改情況,以下過程應該足夠了。
dotnet ef migrations add [Your Own migration name]
dotnet ef migrations remove
然后,像平常一樣部署。
https://www.codeproject.com/Articles/5294835/EF-Core-5-Data-Migration-in-NET-5-in-a-Separate-Li
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态