Mysql 該如何 Entity Framework 資料庫遷移 和 如何更好的支援EntityFramework.Extended

來源:互聯網
上載者:User

標籤:

問題

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.