将EF Code First 应用于已经存在的数据库

  Entity Framework v6.1 开始原生支持将Code First 应用于一个已经存在的数据库。下面以一个demo来介绍如何把Code First 应用于已经存在的数据库以及如何使用Code First 迁移来更新数据库。

1.把Code First应用于已经存在的数据库

  首先,创建数据库CodeFirstFromExistingDB,接着创建两个表Categories 和 Products ,表结构如下:

Categories

Products

然后插入测试数据:

   

接着,创建一个MVC项目并且从数据库生成Code First 数据模型:

1.创建一个名为CodeFirstExistingDB的web应用 ,并且设置身份验证为个人用户账户

web应用创建完成后,右击项目目录添加文件夹DataModel,右击文件夹DataModel选择添加-新建项-数据-ADO.NET实体数据模型,设置名称为:StoreContext

点击添加,在向导页选择来自数据库的Code First

点击下一步,在选择连接界面点击新建连接,

在连接属性页面,设置数据库信息:

点击下一步,选择数据库对象(表),并且勾选确定所生成对象名称的单复数形式复选框

 

ADO.NET实体数据模型创建完成后,会在DataModel文件夹下创建Product、Category以及StoreContext三个类。

接着添加控制器和视图来展示数据:

生成项目,然后右击Controller文件夹,选择添加-控制器,选择包含视图的MVC5控制器(使用Entity Framework),控制器设置如下:

创建完成后,右击视图文件件下Products文件夹下的index.cshtml,在浏览器中查看,可以看到数据展示到页面上。

2.使用Code First 迁移更新数据库

  Code First 迁移,可以把你在代码中对模型的修改更新到数据库,要使用Code First 迁移,首先需要打开它:

在工具-NuGet包管理器-程序包管理器控制台输入:Enable-Migrations -ContextTypeName CodeFirstExistingDB.DataModel.StoreContext ,回车。(注意,需要制定需要使用的上下文(context)因为在创建项目时自动创建了身份验证的上下文)。执行完成之后会创建Migrations 文件夹,里面包含一个Configuration.cs 类。

  此时,要使Code First工作还需要一个额外的步骤,如果现在创建一个迁移,它会尝试把上下文里包含的说有实体添加到数据库,由于Products和categories 表已经存在于数据库中,所以迁移会失败。所以首先需要创建一个初始化为空的迁移,然后我们就可以对任何修改添加迁移了。

  在包管理器控制台输入:Add-Migration InitialCreate -IgnoreChanges 以创建一个空的迁移。

IgnoreChanges 标识用于确保这次迁移不会做任何事。执行它会在数据库中创建migrations 表,migrations 表是一个对数据库迁移之前的快照。

  接着,在包管理器控制台输入:update-database 用于把初始化迁移更新到数据库。

  迁移初始化完成后,来使用Code First 迁移 更新数据库:

  在Product表中添加Description 列,并且设置长度为50,([StringLength(50)] );现在添加一个新的迁移来把修改更新到数据库。

包管理器控制台输入:Add-Migration add_product_description ,执行后Migrations 文件夹会增加一个文件,用来描述这次迁移。接着,在包管理器控制台输入:

update-database , 新的列就会被增加到Products表中。

  

posted @ 2016-10-25 18:11  青玄鸟  阅读(2217)  评论(0编辑  收藏  举报