博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC中code first方式开发,数据库的生成与更新
阅读量:5939 次
发布时间:2019-06-19

本文共 1708 字,大约阅读时间需要 5 分钟。

在使用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

你可能感兴趣的文章
[关于SQL]查询成绩都大于80分的学生
查看>>
Delphi(Tuxedo,BDE,ADO)三合一数据集组件HsTxQuery
查看>>
java之ibatis数据缓存
查看>>
“TNS-03505:无法解析名称”问题解决一例
查看>>
LeetCode - Longest Common Prefix
查看>>
Android图片处理
查看>>
2015年第21本:万万没想到,用理工科思维理解世界
查看>>
大家谈谈公司里的项目经理角色及职责都是干什么的?
查看>>
剑指offer
查看>>
Velocity魔法堂系列二:VTL语法详解
查看>>
NopCommerce架构分析之八------多语言
查看>>
转:Eclipse自动补全功能轻松设置
查看>>
ES6新特性:Javascript中的Reflect对象
查看>>
hibernate逆向工程生成的实体映射需要修改
查看>>
mysql update操作
查看>>
Robots.txt - 禁止爬虫(转)
查看>>
MySQL数据库
查看>>
项目分析_xxoo-master
查看>>
SQLServer2012自增列值跳跃的问题
查看>>
ViewBag对象的更改
查看>>