asp.net mvc + mysql + ef6

时间:2023-03-09 04:56:10
asp.net mvc + mysql + ef6

1.通过NuGet包管理器安装:EntityFramework6.1.3、MySql.Data.Entity6.9.9

asp.net mvc + mysql + ef6

2.添加新建项→ADO.NET实体对象模型(命名MyContext)→空CodeFirst模型。该模型会自动在app.config中添加连接字符串

<connectionStrings>
<add name="MyContext" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=CodeFirstDemo.MyContext;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>

3.启用迁移。

在控制台中输入Enable-Migrations(启动迁移)。注意:默认项目一定要是模型所在的项目。

此时项目中会自动生成Migration文件夹

asp.net mvc + mysql + ef6

4.为迁移起个名字

在控制台输入:Add-Migration InitModel。(InitModel:为本次迁移起个名字)

此时在项目的Migration文件夹中会自动生成迁移记录文件,文件名以“当前时间_本次迁移的名字”作为类名。

asp.net mvc + mysql + ef6

记录文件有一个设计类和一个资源类和一个迁移具体操作的方法。

asp.net mvc + mysql + ef6

5.生成Sql脚本,用于检查语句问题。在mysql中有一点需要注意,字段类型如果是字符型256,会报错,需要调整一下长度。

在控制台输入Update-DataBase –script。生成Sql脚本。(在迁移过程中出现奇葩问题的时候,就生成sql脚本检查一下吧。)

6.更新本次迁移内容

Update-DataBase –verbose(或者-v)。更新数据库,并且查看执行的具体sql语句。

注意:

1、打开App.config或web.config:

找到连接字符串:

<connectionStrings>
<add name="MyContext" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=CodeFirstDemo.MyContext;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>

修改为MySql的连接字符串:

<connectionStrings>
<add name="ContextName" connectionString="Data Source=服务器地址;port=端口号;Initial Catalog=数据库名称;user id=账号;password=密码;" providerName="MySql.Data.MySqlClient"/>
</connectionStrings>

2、这是因为当前的Sql生成器依然是MSSqlServer,那么如何启动MySql的Sql生成器呢?

在Migration文件夹中的配置类Congifuration的构造方法中:

public Configuration()
{
AutomaticMigrationsEnabled = false;
SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());//设置Sql生成器为Mysql的
}

3、但是到仅仅这样还不够,因为上下文配置还是默认的MSSqlServer的,_MigrationHistory表也有字段是string类型的,还会出现该错误。

我们还要在MyContext类上通过特性标记上下文使用MySql的配置。

[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
} ...
}

总结:

遇到最多的也是最难搞的就是这个报错:asp.net mvc + mysql + ef6

通过生成的script来检查问题出在哪里,然后在Context中重写protected override void OnModelCreating(DbModelBuilder modelBuilder),来调整字段类型长度。

原文链接:http://www.cnblogs.com/kexxxfeng/p/5095812.html