ASP.NET Core MVC with EF Core-迁移
當(dāng)你開發(fā)一個新的應(yīng)用程序的時候,你的模型頻繁的變化,而每一次的數(shù)據(jù)模型的改變,將使它與數(shù)據(jù)庫不同步。你通過配置EF Core,使得數(shù)據(jù)庫不存在時創(chuàng)建數(shù)據(jù)庫。每一次改變數(shù)據(jù)模型(增刪改 實(shí)體類或者改變DbContextClass),可以刪除數(shù)據(jù)庫然后重新創(chuàng)建一個與數(shù)據(jù)模型相匹配的數(shù)據(jù)庫,然后填充測試數(shù)據(jù)。
這種保持?jǐn)?shù)據(jù)模型與數(shù)據(jù)庫同步的方法能夠工作得很好,然后卻不適用于將應(yīng)用程序發(fā)布到產(chǎn)品中的階段。當(dāng)應(yīng)用程序在真實(shí)的產(chǎn)品的時候,通常產(chǎn)品中包含有你需要保留的數(shù)據(jù),在模型改變的時候(比如增加一個新列),你不希望丟失任何數(shù)據(jù)。EF Core 遷移功能能夠解決這個問題,它能使EF更新數(shù)據(jù)庫的結(jié)構(gòu)而不用重新創(chuàng)建一個新的數(shù)據(jù)庫。
為了能夠使用遷移,你可以使用 Package Manager Console(PMC)或者command-line interface(CLI 命令行)。
用于CLI的EF工具 是在 Microsoft.EnrityFrameworkCore.Tools工具包中提供,對于 vs 15.7的版本,已經(jīng)默認(rèn)添加到了MVC模板中的 Microsoft.AspNetCore.App 包中。不用像官方教程介紹的,需要手工添加。
?<PackageReference Include="Microsoft.AspNetCore.App" />
更改連接字符串
更改appsettings.josn文件中數(shù)據(jù)庫連接字符串中的數(shù)據(jù)庫名稱為以前未使用的過名稱。這樣的改變使項(xiàng)目能使用 first migration 創(chuàng)建一個新的數(shù)據(jù)庫。這并不是一個開始使用遷移必需的操作,但你會看到這是一個好主意。
另外一個方法是從SSOX(SQL Server Object Exporer SQL對象資源管理器)或CLI中刪除數(shù)據(jù)庫。
刪除數(shù)據(jù)庫的CLI命令是:dotnet ef database drop
創(chuàng)建初始化遷移
在解決方案管理器中,右鍵 項(xiàng)目文件夾----在彈出的菜單中選擇 在文件資源管理器 中打開--------在地址欄輸入cmd.
在控制臺窗口中輸入:dotnet ef migrations add InitialCreate?
EF產(chǎn)生的代碼會從頭開始創(chuàng)建數(shù)據(jù)庫。
會在解決方案管理器中 建立一個Migrations 文件夾,在其中,有一個同名加時間戳的cs文件。Up方法創(chuàng)建與數(shù)據(jù)模型實(shí)體集對應(yīng)的數(shù)據(jù)庫表格,down方法刪除它們。
如果你創(chuàng)建初始化遷移的時候,數(shù)據(jù)庫已經(jīng)存在。創(chuàng)建數(shù)據(jù)庫的代碼依然會生成但是它不會運(yùn)行,因?yàn)閿?shù)據(jù)庫已經(jīng)與數(shù)據(jù)模型相匹配。當(dāng)你發(fā)布一個應(yīng)用到另外一個環(huán)境的時候,數(shù)據(jù)庫不存在,此代碼將會創(chuàng)建數(shù)據(jù)庫,所以,這是一個好的主意先來測試它。
數(shù)據(jù)模型快照(Data Model snashot)
?遷移創(chuàng)建了現(xiàn)有數(shù)據(jù)庫結(jié)構(gòu)的快照。當(dāng)你增加一個遷移,通過對比數(shù)據(jù)模型和快照文件,決定改變了什么。
刪除遷移的控制臺命令是 dotnet ef migrations remove?,會刪除遷移和保證快照 被正確的重置。
應(yīng)用遷移到數(shù)據(jù)庫
應(yīng)用遷移更新數(shù)據(jù)庫的CLI:dotnet ef database update
數(shù)據(jù)庫中的EFMigrationsHistory表 會跟蹤哪些遷移被應(yīng)用到數(shù)據(jù)庫。
原文地址:https://www.cnblogs.com/liuyuanhao/articles/9442266.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的ASP.NET Core MVC with EF Core-迁移的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【翻译】asp.net core中使用M
- 下一篇: C#中字段、属性、只读、构造函数赋值、反