数据库初始化

之前看到Code-First会自动根据域模型创建数据库,下图展示了一个数据库初始化工作流程,该工作流程基于从DbContext派生的上下文类的基础构造函数中传递的参数

如上图所示,上下文类的基础构造函数可以具有以下参数。

1.没有参数
2.数据库名称
3.连接字符串名称

没有参数

如果没有在上下文类的基础构造函数中指定参数,那么它会在本地SQLEXPRESS服务器中创建一个名称与您的{Namespace}。{上下文类名}匹配的数据库

数据库名称

如果指定了数据库名称参数,Code First将使用您在本地SQLEXPRESS数据库服务器的基础构造函数中指定的名称创建一个数据库

ConnectionString名称

在app.config或web.config中定义连接字符串,并在上下文类的基础构造函数中指定以“name =”开头的连接字符串名称;确保providerName = "System.Data.SqlClient"在连接字符串中包含SQL Server数据库

EF提供了四种数据库初始化种策略

策略一:数据库不存在时重新创建数据库(默认策略)
Database.SetInitializer<xxDbContext>(new CreateDatabaseIfNotExists<xxDbContext>());
策略二:每次启动应用程序时创建数据库(如果报错:无法删除数据库XXX,因为该数据库当前正在使用,需要在数据库删除数据库时勾选关闭连接)
Database.SetInitializer<xxDbContext>(new DropCreateDatabaseAlways<xxDbContext>());
策略三:模型更改时重新创建数据库
Database.SetInitializer<xxDbContext>(new DropCreateDatabaseIfModelChanges<xxDbContext>());
自定义数据库初始化程序
Database.SetInitializer<xxDbContext>(null);

看到CreateDatabaseIfNotExists是默认的数据库初始化策略,如果现在更改了域模型,看看会怎么样

因为添加了一个新的域模型,故报错模型已发生更改,这时候将数据库初始化策略改为DropCreateDatabaseIfModelChanges看看

程序成功运行;数据库也被同步更新(但是之前的一条数据却丢失了,这是DropCreateDatabaseIfModelChanges策略是模型发生更改就重建数据库故之前的数据也会被删除;随后看数据迁移会解决这个问题)

至于DropCreateDatabaseAlways策略每次运行应用程序都会重新创建数据库很好理解,最后可以通过

Database.SetInitializer<BaseDbContext>(null);

关闭数据库初始化程序

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

EF-CodeFirst-数据库初始化的更多相关文章

  1. EF CodeFirst 数据库初始化策略

    最近用EF做了几个小东西,了解简单使用后有了深入研究的兴趣,所以想系统的研究一下EF CodeFist的几个要点.下面简单列一下目录 1.1 目录 数据库初始化策略和数据迁移Migration的简单介 ...

  2. EF CodeFirst 数据库的操作

    生成数据库 首先需要通过Nuget安装Migration 这一步是初始化Migration操作. 首先打开程序包控制台, 工具——NuGet包管理器——程序包管理控制台 打开后,在控制台输入下面的命令 ...

  3. EF CodeFirst系列(2)---CodeFirst的数据库初始化

    1. CodeFirst的默认约定 1.领域类和数据库架构的映射约定 在介绍数据库的初始化之前我们需要先了解领域类和数据库之间映射的一些约定.在CodeFirst模式中,约定指的是根据领域类(如Stu ...

  4. EF CodeFirst系列(9)---添加初始化数据和数据库迁移策略

    1.添加初始化数据(Seed) 我们可以在初始化数据库的过程中给数据库添加一些数据.为了实现初始化数据(seed data)我们必须创建一个自定义的数据库初始化器(DB initializer),并重 ...

  5. 6.翻译系列:EF 6 Code-First中数据库初始化策略(EF 6 Code-First系列)

    原文链接:http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-firs ...

  6. EF CodeFirst简介、默认约定、数据库初始化策略

    CodeFirst 工作流程 创建或修改领域类-->使用数据注解或者Fluent API来配置领域类-->使用自动数据库迁移技术或者基于代码的数据库迁移技术来创建数据库. CodeFirs ...

  7. 4.DB Initialization(数据库初始化)[EF Code-First系列]

    前面的例子中,我们已经看到了Code-First自动为我们创建数据库的例子. 这里我们将要学习的是,当初始化的时候,Code-First是怎么决定数据库的名字和服务的呢??? 下面的图,解释了这一切! ...

  8. EF Code-First 学习之旅 数据库初始化

    1.CreateDatabaseIfNotExists: 2.DropCreateDatabaseIfModelChanges: 3.DropCreateDatabaseAlways: 4.Custo ...

  9. EF CodeFirst 如何通过配置自动创建数据库<当模型改变时>

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧 ...

  10. EF CodeFirst 创建数据库

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    话说EF支持三种模式:Code First   M ...

随机推荐

  1. linux每日命令(35):grep命令

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

  2. c++默认参数函数注意事项

    再有默认参数的函数中,一般我们都把默认参数放在声明处而不是定义处. 如果声明和定义都有默认参数,编译器将会报错. 调用含有默认实参的函数时,我们可以包含参数,也可以省略. 有默认参数的函数,我们可以不 ...

  3. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-10底层驱动之I2C

    视频简介:该视频介绍iCore3应用开发平台中I2C通信的实现方法. 源视频包下载地址:链接:http://pan.baidu.com/s/1dF5Ssbn 密码:czw8 银杏科技优酷视频发布区:h ...

  4. git push 失败

    先上图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvV29KaWFvRGFaaG9uZw==/font/5a6L5L2T/fontsize/400/fil ...

  5. duilib进阶教程 -- TreeView控件的bug (9)

    一.不自动调整子控件的宽度(TreeView宽度小于260时) 相信亲们用同样的代码,显示效果肯定和Alberl不一样吧~O(∩_∩)O~ 嘿嘿,仔细对比下,看看你们的列表头背景图片是下面这样的么? ...

  6. [Bayes] prod: M-H: Independence Sampler for Posterior Sampling

    M-H是Metropolis抽样方法的扩展,扩展后可以支持不对称的提议分布. 对于M-H而言,根据候选分布g的不同选择,衍生出了集中不同的变种: (1)Metropolis抽样方法 (2)随机游动Me ...

  7. [Node.js] 09 - Connect with Database

    简介两个数据库: Node.js 连接 MySQL Node.js 连接 MongoDB Node.js 连接 MySql 导入已有数据库: unsw@unsw-UX303UB$ mysql -u r ...

  8. java导出json格式文件

    生成json文件代码: import java.io.File; import java.io.FileWriter; import java.io.Writer; public class Crea ...

  9. Kafka 2.0 ConsumerGroupCommand新功能

    一直觉得kafka-consumer-groups.sh的输出信息有点少,总算在2.0中得到了改善.新版本ConsumerGroupCommand增加了查看成员信息.组状态信息,算是弥补了之前的不足. ...

  10. for循环将字典添加到列表中出现覆盖前面数据的问题

    出现问题: rets = [{'id':1},{"id":2},{"id":3}] context = {} context['count'] = len(re ...