Asp.Net EF6+Mysql上的数据库迁移.

近期需要做一个.Net+Mysql的项目,其中在设计开发时,数据库的时候都是一步一步的建表,因为大部分业务细节并没有确定下来,所有表不是统一创建好的。那么使用EF的话就需要用到数据库迁移。感觉操作内容以后回记不住,还是写份博客记录一下。

 

其中EF+Mysql必须保持Mysql与项目的DLL版本相同,这部分网络有很多很好的文章,这里就不细说了。

下面是正确的上下文。

其中[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]是必要的。

    [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
    public  class BsContext : DbContext, Data.BsContext.IBsContext
    {

        public BsContext() : base("name=BMi-StringCon")
        {
            this.Configuration.LazyLoadingEnabled = false;

        }
        #region Tabel
        public virtual DbSet User { set; get; }
        public virtual DbSet Order { set; get; }
        public virtual DbSet Credit { set; get; }
        #endregion
    }

之后就可以开启迁移了。

打开“程序包管理控制台”,使用命令:

Enable-Migrations -Force

若上下文不是在启动项目,而是在一个类库中的话,会提示在“程序集“项目名”中找不到上下文类型。

这种情况下可以使用下面的命令:

Enable-Migrations -ProjectName 库名 -Force

此时若提示:Code First Migrations enabled for project 库名.那么迁移就已经创建好了,此时对应的地方(类库)会多出一个文件夹。

打开Configguration.cs,将AutomaticMigrationsEnabled改为true

两个文件的说明在网上有很多详细的文章,这也不细说了。

 

接下来就开始更新数据库

在控制台中运行命令:

update-database -verbose -force

对应类库的命令:

update-database -ProjectName 库名 -verbose -force

显示Running Seed method.即数据库迁移成功,可以打开数据库查看数据库的架构是否发生了改变。

 

关于报错:

MySql.Data.MySqlClient.MySqlException (0x80004005): Invalid use of NULL value

这个错误是,在update数据库的时候,忽略了数据为空的情况,比如某字段在数据库中为Null,我们使用迁移改为 Not Null,那就会报这个错误,因为数据没有默认值,并且不能为Null,那么迁移就会报错。

目前我遇到在Asp.Net EF + Mysql数据库迁移上的问题就这么多,以后发现再补全其他解决方法。

文章若有不对的地方希望大神们能指出,小弟将尽快学习与修正,并希望该文章能对各位有所帮助。

你可能感兴趣的:(Asp.Net,EF6)