EF连接MySQL核心
- 引用MySql.Data.Entity相关的package
- 最好通过NuGet添加。NuGet会将所有相关或依赖的包都引用到项目中,并且会直接配置web.config
设置DbContext的数据库配置类型(EFConfiguration)
有两种方法:
- 在代码中使用特性
[DbConfigurationType(typeof(MySqlEFConfiguration))] public class LoverCMDDbContext : DbContext { public LoverCMDDbContext() : base("LoverCMDDbContext") { } }
在web.config中配置
<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6"> <contexts> <context type="LoverCMR.DAL.LoverCMDDbContext,LoverCMR"> <databaseInitializer type="LoverCMR.DAL.LoverCMDInitializer,LoverCMR"></databaseInitializer> </context> </contexts> <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" /> <!--<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />--> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider> </providers> </entityFramework>
- 设置数据库连接字符串
<connectionStrings>
<add name="LoverCMDDbContext" connectionString="Data Source=localhost;Port=3306;Initial Catalog=LoverCMD;User id=root;Password=123456;" providerName="MySql.Data.MySqlClient"/>
</connectionStrings>
ps
- 什么时候开始创建数据库的?
- 答: 第一次查询数据库时,生成数据库。注意,创建DbContext实例,并不会生成数据库。
- 如何配置实例类型和mysql数据库字段类型的映射?
- 答:建议使用Fluent API方式。Data Annotation方式不符合解耦合的设计理念。
- 如果使用Data Annotation方式,特别需注意,默认情况下,实体类型string默认映射为数据库longtext类型。可以指定MaxLength特性,来规避这个问题。