接着上篇结尾所说,如果开发中刚才遇到Model需要添加或者减少字段/属性的话,但是刚好你也利用EF的Code frist通过Model生存的数据库,这时改怎么办?
添加一个字段
我们现在要给Movie实体模型类添加一个评价的字段该怎么搞!我们知道我们默认使用EF code frist生存的数据库是同步性的,这样才能便于我们更好的开发,如果实体模型和数据库不同步的话,实体框架应该会抛出异常。
code frisr设置模型库迁移
在VS里我们先移除dataBase,具体操作如下:
删除EF连接,为了是我们的应用程序不出错,我们需要做一下事情,具体操作如下:
完了在控制台窗体输入一下内容:
运行完控制台的命令后我的项目结构变化如下:
多了一个数据迁移的Migrations文件夹,这个文件夹就是code frist迁移生产的,里面有一个历史记录的类还有一个配置信息类。我们打开Configuration.cs类,其面貌如下:
我们对Configuration.cs类的Seed方法进行从新构造,修改代码如下:
接下的事情就是我们需要创建一个迁移DbMigration类,该类负责创建一个database,前面我们不是删除了EF创建的database么。接下来我们在控制台窗体输入下面的命令,具体操作如下:
这个命令就是新构建database并对其进行初始化动作。动作执行完成后你会发现,VS会自动生成一个这个文件,具体如下:
可以看到这个类里面有2个方法,就代码直观上解释的话这个类在运行时的话有一个是在降级过程中执行的操作,另外一个则是在升级过程中的操作。生产的这个类包含创建数据库的模式代码,接下来的事情呢!就是这么把这个数据库创建出来,并且把我们刚才加的测试数据给添加到数据库中,接下来我们继续在控制台窗体操作,具操作如下:
待命令跑完之后我们来运气我们的应用程序看下效果,跑起来我们的程序看我们刚才添加的数据是否能正常显示:
怎么样,效果达到了吧!关于迁移这里可能有很多描述不是很清楚的地方,所以还请各位前辈朋友多多指教。
现在进入正题如果我给Model实体类添加一个字段的话怎么办,比如我给Movie类添加了下面的字段,如下:
添加一个这个属性后,你会立马想到那是不是所有的页面都要去加这个东西,还有Controller里面Action上带Bind[Inculd(xxx,xxx,xxx,xx)]这些地方是不是都要去加这个东西呢,具体修改的地方如下:
Index.cshtml页面:
Create.cshtml修改如下:
我们现在就直接先把程序运行起来看看会出现什么问题:
来个一个大黄页,为什么呢!因为我们在代码迁移数据的时候没有给我们刚才新加的字段所以程序在这里不认识了,所以就出错了,那改呗,哪里出错就改哪里!我们修改Cofiguration类里的Seed方法如下:
修改完这个说还会出错吗?答案是肯定会的,为什么呢!是的我这里是添加了Model的新字段过来,但是数据库里有没有这个字段呢?我们先一步一步走着看,按照常规思维这里是应该先给数据库添加这么一个字段,那么我们用控制台添加该字段,具体操作如下:
当我们执行完这个命令的话,就会在模型快照中添加上这么一个字段同时执行完这个的时候VS也会生出这么一段代码,如下:
然后我们需要在控制台在更新一下datebase,具体操作如下:
更新完后,我们在运行我们的程序看看效果:
然后我们修改(哦,修改页面也需要把Rating这个字段也加上)一个Rating为空的数据,看下效果:
使用这种方式添加字段就必须要改所有用到这些字段的页面手动添加上对应的代码,如上面在index/create/edit/delete.cshtml页面上添加代码。关于这篇的分享的东西就先介绍到这里,通过修改实体模型我们可以看到实体模型怎么和数据库进行同步,这边文章时间有些紧张有些地方可能描述的不是很清楚,还请各位朋友见谅及指导,哪里有不对的地方,还望指导我会第一时间去改正,这篇的话就先到这里吧!