[C#.NET][Entity Framework] 解決 Code First @ MySql 出現 “Specified key was too long; max key length is 767 bytes”
開始之前請閱讀以下相關聯結
http://www.dotblogs.com.tw/yc421206/archive/2014/03/14/144395.aspx
http://www.dotblogs.com.tw/yc421206/archive/2014/01/20/141712.aspx
http://www.dotblogs.com.tw/yc421206/archive/2014/01/21/141824.aspx
環境
- 從NuGet安裝 MySql.Data.Entities 版本為 6.8.8.3,裝完後會加入 MySql.Data.dll 、MySql.Data.Entity.EF6.dll 參考
- VS2013
- MySQL Installer 5.6.16
http://dev.mysql.com/downloads/windows/installer/
安裝後的版本號
準備環境
建立 Model class 專案,並使用 NuGet加入 MySql 相關元件,不知道要加入什麼元件的請點選第一個連結
建立Table 類別,這將同等資料庫的 Table 和 Schema
public class Identity { [Key] public int Id { get; set; } public string Name { get; set; } public string Account { get; set; } }
用來操作實體資料庫的 DbContext 類別,其中”mySql” 為讀取設定檔連線字串的 Name{ public DbSet<Identity> Identities { get; set; } public SystemDbContext() : base("mySql") { Database.SetInitializer(new DropCreateDatabaseAlways<SystemDbContext>()); } }
加入測試用的 Winform 專案,並使用 NuGet加入 MySql 相關元件
在App.conifg加入 provider
加入連線字串
調用 SystemDbContext
{ using (var dbContext = new SystemDbContext()) { dbContext.Identities.Load(); } }
按下按鈕得到了以下錯誤訊息
為了此問題找到了下篇文章,並按照內容實際操作過
但最後我使用下篇解法,比較簡單
在 SystemDbContext 加上 [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))] ,
Note.
Database.SetInitializer(new DropCreateDatabaseAlways<SystemDbContext>()); 這一行若資料庫不存在會出錯,為了不要手動 Drop 資料庫,可以讓EF幫我重新建立資料庫,所以我加了這一行,測試完成後應該拿掉,不然資料庫永遠都沒資料,開發初期我習慣這樣做,用來觀察 Code First 後的 Schema 跟我心中預設的是否相同
public class SystemDbContext : DbContext { public DbSet<Identity> Identities { get; set; } public SystemDbContext() : base("mySql") { Database.SetInitializer(new DropCreateDatabaseAlways<SystemDbContext>()); } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); //modelBuilder.Configurations.AddFromAssembly(typeof(SystemDbContext).Assembly); } }
再執行一次就錯誤就沒有出現了,希望我花了一兩個小時解決的問題,有幫到你。
文章出自:http://www.dotblogs.com.tw/yc421206/archive/2014/03/15/144399.aspx
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET