EF架构~CodeFirst数据迁移与防数据库删除

回到目录

本文介绍两个概念,防数据库自动删除,这是由于在code first模式下,当数据实体发生变化时,会对原来数据库进行删除,并将新数据表添加进来,但这对于我们的运营环境数据库,是万万不能接受的,第二个问题是数据迁移问题,当你有新的实体建立后,如何响应到数据库,这成为一个问题,当然实现也很简单,我们直接使用migrations工具即可.

一 防数据库删除

将你的业务DbInitializer的基类改成CreateDatabaseIfNotExists即可解决这个问题,这是在数据初始化时需要做的事,一般地,我们会选择当实体有变化时,自动更新数据库,但这样做影响比较大,所以我们不提倡使用.

  public class ManagerInitializer : CreateDatabaseIfNotExists<ManagerContext>
    {
        protected override void Seed(ManagerContext context)
{     
//初始化代码 } }

二 数据迁移

这个问题也是必须要解决的,我们的实体添加后,数据库并没有对应的表,我们就需要使用migrations命令来对数据库进行更新,具体操作如下

1 开启migrations功能

enable-migrations -force

2 添加迁移版本

add-migration 名称后缀

我们每次修改实体后,都应该使用这个add-migration来升级历史版本

3 更新数据库

update-database

4 程序运行成功后,如图

这时你查看自己的数据库,新加的实体已经自动添加到数据库了,呵呵.

值得注意的是,通过这种方法进行数据库迁移,数据库的原数据是不会丢失的,即使你在原来的表上添加字段,老数据也不会丢,新字段会有默认值.

对于EF7来说,它只支持Code First模式,所以这种模式在dotnet框架里将会成为主流!

补充:

最近有朋友问我在服务器上如何进行数据的更新,即在生产环境如何使用迁移,可以读一下我的这篇文章<EF架构~CodeFirst生产环境的Migrations>

 

回到目录

posted @   张占岭  阅读(4309)  评论(5编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2012-07-06 代码之美~强大的构造方法重载
2011-07-06 说说Remoting
点击右上角即可分享
微信分享提示