在使用EF的实际编程中我们经常遇到这样的问题:发现实体结构需要新增加一个字段,或者减少一个字段,急需把实体结构修改,并让数据库更新这种修改。在用Model First或者Database First的情况下我们可以通过在实体视图界面下生成更改数据库数据结构的sql语句,然后通过执行这些sql语句来完成数据库的修改。可Code First下应该怎么办呢。

其实我们可以通过程序包管理控制台的命令来完成这种修改:

如下面的实体类代码,红底黄字部分是我添加的一个新的字段,现在我需要让数据库也跟着进行改变:

public class Book
    {
        public int Id { get; set; }
        public string Name { get; set; }

public string Author { get; set; }

public decimal Price {get;set;}

public List<BookReview> Reviews { get; set; }

}

首先打开程序包管理控制台:

在程序包管理控制台输入命令:enable-migrations:

可以看到,系统出现提示,大体意思是我的这个程序集中有多个上下文类型(我这是一个做实验的程序集,创建了两个EF上下文类型)。一般情况下不会出现这个提示,一个程序集中有多个上下文类型才会出现这个提示。

出现这种提示之后在提示的命令中选择一个,决定要对哪个上下文类型进行迁移就行了,我选择迁移我的“EF原理探究.BookDb”,那么只需要按照提示急需在程序包管理控制台输入:Enable-Migrations -ContextTypeName EF原理探究.BookDb。

在运行完命令之后就会发现自己的项目文件里面多了一个Migrations文件,下一步我们需要对这个文件进行操作。

打开Migrations文件夹下面的Configuration.cs文件会发现代码如下:

internal sealed class Configuration : DbMigrationsConfiguration<EF原理探究.BookDb>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;

AutomaticMigrationDataLossAllowed = true;//这是我自己添加的

}

protected override void Seed(EF原理探究.BookDb context)
        {
            //  This method will be called after migrating to the latest version.

//  You can use the DbSet<T>.AddOrUpdate() helper extension method 
            //  to avoid creating duplicate seed data.
        }
    }

我们只需在Configuration类的构造函数里面插入一句:AutomaticMigrationDataLossAllowed = true;就行了。然后在程序包管理控制台输入命令:updata-database就完成了这种修改,当然,很多情况下运行updata-database修改会报错,如果报错我们可以强制运行,只需加上一个参数-force,完整命令:updata-database -force。

这样就代表迁移成功了!

当然,也有朋友喜欢直接更改数据库的方式完成数据库与实体类的统一,但是这有一个问题,如果在更改了实体类之后直接更改数据库,在统计数目的时候,如db.实体类.count();会发现数据不对,制定了新字段的数据会统计不进来,各种问题。

出自:https://blog.csdn.net/chenguang79/article/details/50847550/

转载于:https://www.cnblogs.com/dashanboke/p/9558264.html

MVC中code first方式开发,数据库的生成与更新相关推荐

  1. [转]wxODBC(wxWidgets)中使用驱动程序方式打开数据库

    wxODBC(wxWidgets)中使用驱动程序方式打开数据库 wxWidgets的文档中都是使用在控制面板/数据源中设定DSN来创建ODBC连接.但是实际上很多小型的应用,只是使用本机的一个Acce ...

  2. uniCloud云函数中通过传统方式操作数据库的-增删改查

    云函数 可以看做java或者php,作为后端服务 cloudfunctions/myCloud/index.js exports.main = async (event, context) => ...

  3. Houdini技术体系 基础管线(三) :UE4以选择区域的方式对地形做生成和更新 上篇...

    背景 前一节里,解决了Houdini地形无缝导入到UE4的流程问题.但这种方法也有它的局限性,在实际游戏项目里,LA和LD还是偏向在游戏引擎编辑器里工作,他们的一些设计也会影响到地形的信息,那么就需要 ...

  4. (一)NET Core 项目中通过EF Core的Code First方式进行数据库的迁移

    EF Core 是现有EF库的修改版本,具有可扩展的,轻量级的和跨平台的支持.它支持关系型数据库和非关系型数据库.还支持"代码优先"或"数据库优先"方法作为编程 ...

  5. Android Studio App开发之网络通信中使用POST方式调用HTTP接口实现应用更新功能(附源码 超详细必看)

    运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一.POST方式调用HTTP接口 POST方式把接口地址与请求报文分开,允许使用自定义的报文格式,由此扩大了该方式的应用场景.POST请求与GET ...

  6. Dom查看数据库mysql_Linux中OS系统和MySQL数据库巡检生成html

    今天在github上看到看到作者domdanrtsey的两款巡检脚本完成OS系统和MySQL数据库巡检,脚本是平时使用的命令的堆积,但是比较特别是作者将脚本输出成html格式,这样就可以通过浏览器完成 ...

  7. 【转】EntityFramework使用Code First模式创建数据库控制生成单数形式的表名

    使用Code-First模式生成数据库时,默认生成的数据库表的名称为类型的复数形式,例如实体类名称是"User",默认生成的数据库表名为"Users",多数情况 ...

  8. eclipse mysql生成实体类_Eclipse实现数据库反向生成实体类(pojo)-------(插件安装和实现步骤的说明)...

    一.插件安装 1.下载插件: http://jaist.dl.sourceforge.net/sourceforge/jboss/HibernateTools-3.2.4.Beta1-R2008103 ...

  9. ASP.NET MVC 学习6、学习使用Code First Migrations功能,把Model的更新同步到DB中

     参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-new-field-to-th ...

  10. 怎么在VS Code中配置C/C++开发环境?

    DevWeekly收集整理每周优质开发者内容,包括开源项目.工具资源.技术文章等方面,每周五首发于DevWeekly,欢迎大家Star并收藏! 原文链接:DevWeekly | 第1期:什么是时间复杂 ...

最新文章

  1. 鼠标移到某一行 某一行变色 鼠标移开恢复
  2. 部署在Netweaver上的Fiori应用的WebContent文件夹
  3. python线下课程厦门_厦门python课程
  4. Qt QMutexLocker_自动解锁的机制
  5. 每日英语:6 Brainy Habits of the Wisest People
  6. oracle 高级用法, DECODE 排序, OVER(PARTITION BY X ORDER BY Y DESC) 开窗函数
  7. 利用vb进行autocad图形格式的批量自动转换.pdf_ReaConverter Lite图像批量转换器下载V7.607官方版...
  8. ModuleNotFoundError: No module named 'tornado'解决办法
  9. 服务器启动socket服务报错 java.net.BindException:Cannot assign requested address
  10. iPhone界面学习(2)
  11. 博途的多步过程控制, 寄存器寻址
  12. 神舟 桌面显示计算机,神舟笔记本双显卡怎么切换不盯道你的笔记本型号
  13. 【win10网络重置后,网络适配器消失或者不能使用】
  14. 中移动浦发联合发布四款产品 ,NFC手机年底上市
  15. max3490esa_MAX4524EUB_美信MAXIM半导体代理就找宇航
  16. css复选框表单,用CSS来美化表单——复选按钮篇
  17. VOC-2007数据集
  18. 大数据学习-用户画像
  19. 【转】JavaScript入门学习书籍的阶段选择——BY怿飞
  20. grpc-gateway

热门文章

  1. 用好binutils之gporf
  2. 简要说明python的缩进规则_关于python的缩进规则的知识点详解
  3. node.js 与 nvm安装教程
  4. SQLServer字符串函数
  5. html下拉菜单的某个值被选定,使用JavaScript在下拉列表中获取选定的值?
  6. windows10中安装anaconda和pytorch
  7. c#时间 转换成java_Java与C#时间转换
  8. 一定不要安装CUDA附带的显卡驱动
  9. LINUX编译时缺少头文件,查找依赖库的终极解决办法
  10. 下载gradel的链接