標籤:
問題
1.在使用EntityFramework訪問Mysql的時候,使用遷移來產生資料庫或者更新資料庫時候會遇到一些問題
2.EntityFramework.Extended對Mysql的支援不是很完全,其中修改是無法直接使用的需要做一些處理
解決方案
1.首先解決第一個問題
準備條件:用Nuget下載Mysql.Data.Entity(可以將依賴連同下載)
我們採用Code First的形式來建立了實體。然後建立自己的DbContext類。
這個直接使用命令
Enable-Migrations -ProjectName MedicalInsurance.Domain
Update-DataBase -ProjectName MedicalInsurance.Domain
來產生Migration檔案
修改Configuration代碼如下:
public Configuration() { AutomaticMigrationsEnabled = true; AutomaticMigrationDataLossAllowed = true; }
在使用如下命令來遷移產生資料庫(執行命令的時候一定要選擇dbcontext所在的項目)
Add-Migration init
Update-DataBase -ProjectName MedicalInsurance.Domain
發現出現問題問題
修改DbContext檔案
在dbcontext加上的特性
在執行 Add-Migration init
這個時候已經執行成功並且產生了相應的遷移檔案
再來執行 Update-DataBase -ProjectName MedicalInsurance.Domain 將遷移更新到資料庫中
如果你要修改實體的欄位,或者增加實體的欄位,或者增加實體,修改完成之後
再次執行
Add-Migration updatedb
Update-DataBase -ProjectName Alien.ClinicSystem.Data
這樣就可以同步更新到資料庫。(在此就不做詳細的步驟了)
2.現在來解決第二個問題
準備條件:用Nuget下載EntityFramework.Extended
關於EntityFramework.Extended 的具體使用 請自行是搜尋。在這裡我只說明Update遇到的問題以及解決辦法。
我們先來執行一下Update操作看看有什麼問題。在這裡我隨便建個個Controller來測試Update(因為我這個項目是mvc的項目)。
我在資料庫手動加了條資料:
現在我們來修改這條資料(將編號為1 的使用者電話修改成“88888888”)
執行開看下效果:
出現以上錯誤,大概意思就是產生的sql語句不對。
如何解決呢。
使用以下方式完美的解決。
首先在DbContext類中修改代碼(紅色標註):
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))] public class ClinicSystemContext : DbContext { public ClinicSystemContext() : base("mysqldb") { Database.SetInitializer<ClinicSystemContext>(null); } public DbSet<User> Users { set; get; } public DbSet<Charge> Charges { set; get; } public DbSet<ChargeItem> ChargeItems { set; get; } public DbSet<Clinic> Clinics { set; get; } public DbSet<Diagnos> Diagnoses { set; get; } public DbSet<Disease> Diseases { set; get; } public DbSet<Drug> Drugs { set; get; } public DbSet<MaterialInfo> MaterialInfos { set; get; } public DbSet<Recipe> Recipes { set; get; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.HasDefaultSchema(""); //增加配置 migration 的注釋掉 啟動並執行時候拿掉注釋 base.OnModelCreating(modelBuilder); } }
然後在項目的啟動的入口增加如下代碼(我這是mvc的項目所以在Application_Start中加):
此時再來執行看看能不能修改。
沒有報錯。看下資料庫內容有沒有修改。
探索資料庫的內容已經修改
注意:
在使用ef.Extened時候,在修改實體,需要遷移資料庫的時候,需要想將DbContext裡面的
modelBuilder.HasDefaultSchema(""); //增加配置 migration 的注釋掉 啟動並執行時候拿掉注釋
注釋。遷移完成之後在去掉注釋。
說明
以上就是我在做項目中遇到的問題,以及解決辦法,歡迎打擊批評指正。
Mysql 該如何 Entity Framework 資料庫遷移 和 如何更好的支援EntityFramework.Extended