C# EF 与 MySql 的那些坑
之前一直想用 mysql 和 ef 。然后多次尝试也只能感叹 还是 sqlsever 是亲儿子。
今天在单位又尝试了一次,然后就成功了,记录一下遇到的问题。
首先是安装包和驱动?。
请保证 MySql.Data / MySql.Data.Entity.EF6 / mysql Connector/NET 版本对应一致
2019.03 我使用的版本是· 6.10.8
Connector/NET 下载地址: https://dev.mysql.com/downloads/connector/net/6.8.html
连接串:
1 <connectionStrings> 2 <add name="xxx" connectionString="Server=localhost;Database=bugbus;User=root;Password=;charset=utf8" providerName="MySql.Data.MySqlClient" /> 3 </connectionStrings>
安装完后 EF的配置会自动添加 可以确认一下:
标红的这一段要手动加。databaseInitializer是初始化的类绑定。
1 <entityFramework> 2 <contexts> 3 <context type="DB.AppContext,DB"> 4 <databaseInitializer type="DB.Initializer,DB"></databaseInitializer> 5 </context> 6 </contexts> 7 <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 8 <parameters> 9 <parameter value="mssqllocaldb" /> 10 </parameters> 11 </defaultConnectionFactory> 12 <providers> 13 <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 14 <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 15 </providers> 16 </entityFramework>
然后运行就是是两个异常
Specified key was too long; max key length is 767 bytes。
Model compatibility cannot be checked because the database does not contain。
这两个异常花了我好久时间查来查去,各种千奇百怪的解决方案。
最后发现 https://www.cnblogs.com/Linner/p/6297223.html 的解决方法简单的解决了问题
1 [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))] 2 public class AppContext : DbContext 3 { 4 static AppContext() 5 { 6 DbConfiguration.SetConfiguration(new MySql.Data.Entity.MySqlEFConfiguration()); 7 } 8 9 public AppContext() : base("xxxxxx") 10 { } 11 12 public DbSet<System.User> Users { get; set; } 13 14 15 }