将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表中。

  

转载于:https://my.oschina.net/u/3024775/blog/783826

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值