Entity Framework中的Migration问题

时间:2021-09-09 22:17:54

1、自从用上了Entity Framework(简称EF),妈妈再也不用担心我要写那么复杂的SQL语句了!

这是微软新一代的ORM工具,它能够将数据库的表中的记录映射成为程序中的一个对象,当然也能够将对象映射为数据库中的一条记录。

它支持三种模式Model First、Database First、Code First。

我们准备用那种方式呢?Code First。为什么呢?因为这只要写一次代码,而且不用去修改数据库。

那么,我们如果修改了代码,增加了一个字段,在model中写了之后,怎么自动修改数据库呢,用到Migration。

它有三步:

Enable-Migrations //允许使用迁移

Add-Migration 你设定一个名字(如 AddCloumText,增加字段Text) //它会自动判断这次的代码和上次的不同,然后将不同找出来

Update-database //更新数据库,它会根据不同,用sql语句修改数据库字段。

So easy是不?

2、EF的Code First方式允许你先写Model,再通过Model生成数据库和表。

具体步骤如下:

1、建项目

2、在model文件夹中,添加一个派生自DbContext的类,和一些Model类。

3、修改web.Config中的连接字符串。

4、生成基架Controller。

这样就可以生成数据库和表。

但实际开发中难免会修改模型和派生的Context,修改后再次运行会出现异常,提示“支持“MyContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库”异常。

可以通过如下步骤更新数据库,消除上述异常:

1、在项目的“程序包管理控制台"窗口,输入”enable-migrations",回车,导致在项目中生成一个“Migrations"文件夹,其中包含两个.cs类。

2、在1中生成的Configuration.cs中修改构造函数中代码为:”AutomaticMigrationsEnabled = true;“

3、保存修改后,在“程序包管理控制台"中输入”update-database",回车,再次运行即可。

3、Code First 迁移更新数据库

在使用 Code First 方式进行MVC程序设计中,更新数据库操作记录:

1.修改需要更新的Model,如:

Entity Framework中的Migration问题
在Company中增加一个列名,如下:
Entity Framework中的Migration问题
修改后将应用程序重新编译,然后选择工具>库程序包管理器>程序包管理控制台,如图:
Entity Framework中的Migration问题
打开控制台,输入enable-migrations -force ,然后回车 如图:
Entity Framework中的Migration问题

运行后在项目项目资源管理器中会出现Migrations文件夹,打开Configuration.cs 文件,将AutomaticMigrationsEnabled 值改为 true.
然后在控制台中输入 update-database 运行