EntityFramework CodeFirst 4.3 step by step (2)
昨天的config和基本的使用已经讲过了,各位读者的评论我也认真看过想过,不知道读者们有没有动手试试,正所谓“纸上得来终觉浅,绝知此事要躬行”啊!
如果您是有过多年开发经验(注意不是一个经验用多年噢!)并且有面向对象特别是Domain-Driven Design方面的思想的大鸟级人物,您一定会有所感触!在本系列之后,我会给大家推荐一本DDD方面的书,如果下面一段时间项目不是很忙的话会一边阅读一边写博客给大家分享和讨论,甚至翻译成中文做连载等等。。。
好了,今天我们接着昨天的说!
3. How to migrate.
昨天我们已经使用CodeFirst反向生成了一个数据库,如果每个项目都能到此为止的话那就好了,但没办法,客户需求要增加,要改变呀!需求变了数据库可能也要变啊! 需求是活的,人脑也要活,微软的工程师都不是泛泛之辈,脑子肯定是更活的,CodeFirst这点都考虑不到的话那我也懒得去捣腾了。
假设我们现在根据需求加一个User类
1 class User 2 { 3 public int UserId { get; set; } 4 public string UserName { get; set; } 5 public string BlogUrl { get; set; } 6 }
在昨天的BlogContext类中新增加一个属性:
public DbSet<User> Users { get; set; }
那我怎么同步地修改数据库呢?(还记得以前使用edmx model的时候吗?数据库做一点改动就要重新做映射)
现在我们可以使用CodeFirst提供的Migration这样来做:
1. 打开Package Manager Console(Tool->Library Package Manager->Package Manager Console)
2. 在Package Manager Console中输入“Enable-Migrations”命令然后回车以启用Migration功能
3. 在根目录下面可以看到自动为我们生成了一个名为“Migrations”的文件夹,里面有Configuration类和InitialCreate类,现在先不管他们,下面用到自然就懂了
4. 在Package Manager Console中输入“Add-Migration AddUser”命令然后回车
5. 在Package Manager Console中输入“Update-Database”命令然后回车
6. 打开数据库看看,果然多了张Users表
如果我们要给User加一个MyBlog属性,并删除BlogUrl属性,那怎么操作呢?
首先我们当然是修改User类
1 class User 2 { 3 public int UserId { get; set; } 4 public string UserName { get; set; } 5 //public string BlogUrl { get; set; } 6 public string MyBlog { get; set; } 7 }
然后下面的步骤和上面类似:
1. 在Package Manager Console中输入“add-migration deleteBlogUrl ”命令然后回车
2. 在Package Manager Console中输入“Add-Migration AddMyBlog”命令然后回车
3. 在Package Manager Console中输入“Update-Database”命令然后回车
看看数据库吧,搞定!
咦,有个问题,还记得Migrations文件吗?那个是干什么的呢?明天我们继续Migration。。。