asp.net mvc + mysql + ef6

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

 

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>
View Code

 

 

3.启用迁移。

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

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

image_thumb10

 

4.为迁移起个名字

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

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

image_thumb17

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

image_thumb23

 

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>
View Code

修改为MySql的连接字符串:

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

 

 

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

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

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

 

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

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

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

 

总结:

遇到最多的也是最难搞的就是这个报错:

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

 

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

posted @ 2017-01-12 15:52  www741147  阅读(267)  评论(0编辑  收藏  举报