首页 > 代码库 > Mysql 该如何 Entity Framework 数据库迁移 和 如何更好的支持EntityFramework.Extended

Mysql 该如何 Entity Framework 数据库迁移 和 如何更好的支持EntityFramework.Extended

问题

1.在使用EntityFramework访问Mysql的时候,使用迁移来生成数据库或者更新数据库时候会遇到一些问题

2.EntityFramework.Extended对Mysql的支持不是很完全,其中修改是无法直接使用的需要做一些处理

解决方案

1.首先解决第一个问题

准备条件:用Nuget下载Mysql.Data.Entity(可以将依赖连同下载)

技术分享

 

我们采用Code First的形式来建立了实体。然后新建自己的DbContext类。

技术分享

这个直接使用命令

 Enable-Migrations -ProjectName MedicalInsurance.Domain

 Update-DataBase -ProjectName MedicalInsurance.Domain 

技术分享

来生成Migration文件

技术分享

修改Configuration代码如下:

 public Configuration()        {            AutomaticMigrationsEnabled = true;            AutomaticMigrationDataLossAllowed = true;        }

在使用如下命令来迁移生成数据库(执行命令的时候一定要选择dbcontext所在的项目)

  Add-Migration init

 Update-DataBase -ProjectName MedicalInsurance.Domain 

 发现出现问题问题

技术分享

修改DbContext文件

技术分享

在dbcontext加上如图的特性

 在执行  Add-Migration init

技术分享

这个时候已经执行成功并且生成了相应的迁移文件

再来执行 Update-DataBase -ProjectName MedicalInsurance.Domain 将迁移更新到数据库中

技术分享

技术分享

如果你要修改实体的字段,或者增加实体的字段,或者增加实体,修改完成之后

再次执行 

  Add-Migration updatedb

  Update-DataBase -ProjectName Alien.ClinicSystem.Data

这样就可以同步更新到数据库。(在此就不做详细的步骤了)

2.现在来解决第二个问题

准备条件:用Nuget下载EntityFramework.Extended

技术分享

关于EntityFramework.Extended 的具体使用 请自行是搜索。在这里我只说明Update遇到的问题以及解决办法。

我们先来执行一下Update操作看看有什么问题。在这里我随便建个个Controller来测试Update(因为我这个项目是mvc的项目)。

我在数据库手动加了条数据:

技术分享

现在我们来修改这条数据(将编号为1 的用户电话修改成“88888888”)

技术分享

 执行开看下效果:

技术分享

出现以上错误,大概意思就是生成的sql语句不对。

如何解决呢。

使用以下方式完美的解决。

首先在DbContext类中修改代码(红色标注):

  [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]    public class ClinicSystemContext : DbContext    {        public ClinicSystemContext() : base("mysqldb")        {            Database.SetInitializer<ClinicSystemContext>(null);        }        public DbSet<User> Users { set; get; }        public DbSet<Charge> Charges { set; get; }        public DbSet<ChargeItem> ChargeItems { set; get; }        public DbSet<Clinic> Clinics { set; get; }        public DbSet<Diagnos> Diagnoses { set; get; }        public DbSet<Disease> Diseases { set; get; }        public DbSet<Drug> Drugs { set; get; }        public DbSet<MaterialInfo> MaterialInfos { set; get; }        public DbSet<Recipe> Recipes { set; get; }        protected override void OnModelCreating(DbModelBuilder modelBuilder)        {            modelBuilder.HasDefaultSchema("");    //增加配置 migration 的注释掉  运行的时候拿掉注释            base.OnModelCreating(modelBuilder);        }    }

然后在项目的启动的入口增加如下代码(我这是mvc的项目所以在Application_Start中加):

技术分享

此时再来执行看看能不能修改。

技术分享

没有报错。看下数据库内容有没有修改。

技术分享

发现数据库的内容已经修改

 

注意:

在使用ef.Extened时候,在修改实体,需要迁移数据库的时候,需要想将DbContext里面的

       modelBuilder.HasDefaultSchema("");    //增加配置 migration 的注释掉  运行的时候拿掉注释

注释。迁移完成之后在去掉注释。

 

说明

 以上就是我在做项目中遇到的问题,以及解决办法,欢迎打击批评指正。

 

 

 

Mysql 该如何 Entity Framework 数据库迁移 和 如何更好的支持EntityFramework.Extended