EF CodeFirst 数据库初始化策略】的更多相关文章

最近用EF做了几个小东西,了解简单使用后有了深入研究的兴趣,所以想系统的研究一下EF CodeFist的几个要点.下面简单列一下目录 1.1 目录 数据库初始化策略和数据迁移Migration的简单介绍 配置一对一关系 配置一对多关系 配置多对多关系 开发环境配置Migration最佳实践和生产环境配置Migration最佳实践 2.1 数据库初始化策略 在**http://www.entityframeworktutorial.net**这个网站中,我找到相关数据库初始化的策略 2.1.1有四…
原文链接:http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx EF 6 Code-First系列文章目录: 1 翻译系列:什么是Code First(EF 6 Code First 系列) 2.翻译系列:为EF Code-First设置开发环境(EF 6 Code-First系列) 3.翻译系列:EF Code-First 示例(EF 6 Cod…
CodeFirst 工作流程 创建或修改领域类-->使用数据注解或者Fluent API来配置领域类-->使用自动数据库迁移技术或者基于代码的数据库迁移技术来创建数据库. CodeFirst默认约定 约定就是一系列的默认规则,通过这些规则,在使用EF Code-First的时候,可以自动的基于你的领域类配置概念模型.默认约定的命名空间:System.Data.Entity.ModelConfiguration.Conventions; ①schema(模式)  默认情况下,EF会为所有的数据库…
EF数据库初始化策略及种子数据的添加 CreateDatabaseIfNotExists 判断当前数据库连接字符串对应的数据库是否存在,若不存在则根据代码定义的model进行创建 DropCreateDatabaseIfModelChanges 如果代码定义的model发生变化则删掉重建 DropCreateDatabaseAlways 不论model是否发生变化,总是删掉原有数据库,并根据code定义的model重建数据库 数据库自动迁移策略 当数据模型更新时重建数据库,并保有迁移记录,可以回…
今天去搜寻,ef创建数据库的策略有四种,区分还是和数据库里sql的创建的语句这些英文差不多一致. 一:数据库不存在时重新创建数据库 Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists<testContext>()); 策略二:每次启动应用程序时创建数据库 Database.SetInitializer<testContext>(new DropCreateDatabaseAlways<…
通过启用迁移和更新数据库可以很容易的生成一张表.但是对数据库修改之后,通过数据迁移就没那么好实现了. 这里用到数据库生成策略,进行对数据库操作: 一.3种主要数据库生成策略 1 CreateDatabaseIfNotExists 方法会在没有数据库时创建一个,这是默认行为. Database.SetInitializer(new CreateDatabaseIfNotExists<xxx>()); 2 DropCreateDatabaseIfModelChanges 如果我们在在模型改变时,自…
生成数据库 首先需要通过Nuget安装Migration 这一步是初始化Migration操作. 首先打开程序包控制台, 工具——NuGet包管理器——程序包管理控制台 打开后,在控制台输入下面的命令,这个命令只需要在第一次的时候使用. Enable-Migrations 输入完成后,会在我们的目录生成一个名为 Migrations 的文件夹 第二步,在控制台输入这个命令 Add-Migration InitialCreate 这一步是创建初始化的数据库,生成创建数据库表和相关设置的文件.一般这…
1. CodeFirst的默认约定 1.领域类和数据库架构的映射约定 在介绍数据库的初始化之前我们需要先了解领域类和数据库之间映射的一些约定.在CodeFirst模式中,约定指的是根据领域类(如Student,Grade类)自动配置概念模型的一些默认规则.在上一节的小栗子中,我们没有在领域类中做任何配置,但是EF API帮我们配置了主外键.关系.列的数据类型等,这就是约定在起作用.下表中列除了一些默认的CodeFirst约定: 默认规则 描述 Schema EF创建所有的DB对象都放在dbo架构…
一. 四种初始化策略 EF的CodeFirst模式下数据库的初始化有四种策略: 1. CreateDatabaseIfNotExists:EF的默认策略,数据库不存在,生成数据库:一旦model发生变化,抛异常,提示走数据迁移 2. DropCreateDatabaseIfModelChanges:一旦model发生变化,删除数据库重新生成  3. DropCreateDatabaseAlways:数据库每次都重新生成 4. 自定义初始化(继承上面的三种策略中任何一种,然后追加自己的业务) 关闭…
前面的例子中,我们已经看到了Code-First自动为我们创建数据库的例子. 这里我们将要学习的是,当初始化的时候,Code-First是怎么决定数据库的名字和服务的呢??? 下面的图,解释了这一切!!! 这个图解释了,数据库初始化的流程,是基于我们在上下文类中的构造函数中传递的参数. 在上面的图中,context类中的base构造器中,可以填入下面的参数: 无参数(No Parameter) 数据库的名字(Database Name) 连接字符串的名字(Connection String Na…
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/relationship-in-entity-framework-using-code-first-approach-w/ In this article, you will learn about relationships in Entity Framework using the Code First Approach with Fluent API. 在这篇文章中,你将会学习到使用EF…
原文链接:http://www.entityframeworktutorial.net/code-first/setup-entity-framework-code-first-environment.aspx EF 6 Code-First系列文章目录: 1 翻译系列:什么是Code First(EF 6 Code First 系列) 2.翻译系列:为EF Code-First设置开发环境(EF 6 Code-First系列) 3.翻译系列:EF Code-First 示例(EF 6 Code…
原文链接:http://www.entityframeworktutorial.net/code-first/simple-code-first-example.aspx EF 6 Code-First系列文章目录: 1 翻译系列:什么是Code First(EF 6 Code First 系列) 2.翻译系列:为EF Code-First设置开发环境(EF 6 Code-First系列) 3.翻译系列:EF Code-First 示例(EF 6 Code-First系列) 4.翻译系列:EF…
现在假想,我们想要为讴歌学校创建一个应用程序,这个程序需要能够来添加或者更新学生,分数,教师还有课程信息. 代替之前我们的做法:先是创建数据库,现在我们不这么做,我们先来创建领域类,首先我来创建两个简单的类,一个是Student类,一个是Standard类. 每个学生都有一个分数,下面看代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Thr…
前面,我们已经了解了Code-First利用领域类,怎么为我们创建数据库的简单示例.现在我们来学习一下Code-First约定吧. 什么是约定 约定说白了,就是基于一套规矩办事,这里就是基于你定义好的领域类,然后根据默认的规矩来配置概念模型.Code-First约定定义在这个命名空间下面: System.Data.Entity.ModelConfiguration.Conventions 现在来大致浏览一下都有哪些约定吧: 类型发现 在前面的章节中,我们在上下文类中创建了DbSet属性的类集合,…
1.添加初始化数据(Seed) 我们可以在初始化数据库的过程中给数据库添加一些数据.为了实现初始化数据(seed data)我们必须创建一个自定义的数据库初始化器(DB initializer),并重写其中的Seed方法. 下边的栗子展示在School数据库中给Standard表添加默认的数据: 第一步:创建自定义初始化器 //继承三种内置的初始化器中的DropCreateDatabaseAlways public class SchoolDBInitializer : DropCreateDa…
1.CreateDatabaseIfNotExists: 2.DropCreateDatabaseIfModelChanges: 3.DropCreateDatabaseAlways: 4.Custom DB Initializer: public class SchoolDBContext: DbContext { public SchoolDBContext(): base("SchoolDBConnectionString") { Database.SetInitializer&…
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    话说EF支持三种模式:Code First   Model First   DataBase First,微软最新的EF框架,也就是EF7舍弃了Model First 和 DataBase First,咱们作为最底层的程序员必须跟着'党'的走,既然微软都放弃了Model First 和 Database First,那么我们也应当跟着'党'的路线走…
我们初始化数据库一节已经知道:EF为每一个具体的类生成了数据库的表.现在有了一个问题:我们在设计领域类时经常用到继承,这能让我们的代码更简洁且容易管理,在面向对象中有“has  a”和“is a”关系(如student has a name,student is a person--继承),然而数据库中只有“has a”关系.数据库管理系统并不支持继承,所以我们怎么去映射具有继承关系的领域类呢? EF CodeFirst中有三种方式表示继承体系: 1.TPH(table per hierarch…
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧惭愧. 如有不明白,请参考:EF CodeFirst 创建数据库 及 EF CodeFirst增删改查之'CRUD' 话不多说,直接上代码: using System; using System.Collections.Generic; using System.Linq; using System…
策略一:数据库不存在时重新创建数据库 Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists<testContext>()); 策略二:每次启动应用程序时创建数据库 Database.SetInitializer<testContext>(new DropCreateDatabaseAlways<testContext>()); 策略三:模型更改时重新创建数据库 Database.…
策略一:数据库不存在时重新创建数据库 程序代码 Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists<testContext>()); 策略二:每次启动应用程序时创建数据库 程序代码 Database.SetInitializer<testContext>(new DropCreateDatabaseAlways<testContext>()); 策略三:模型更改时重新创建数据库…
前提:搭建成功codefirst相关代码,参见EF Codefirst  初步学习(一)--设置codefirst开发模式 具体需要注意点如下: 1.确保实体类库程序生成成功 2.确保实体表类库不缺少主键 3.将实体类库设置为"设为启动项目"(非必须,建议) 操作步骤: 一.添加数据库迁移命令 Add-Migration AddInstrument(此次更新名称,自定义) 二.添加成功后,更新到数据库 Update-Database -Verbose完成.其他错误和需要注意的地方,以后…
本文所使用的VS版本:VS2017 15.3.0 首先新建一个.net core项目  取名NetCoreTask 使用模型视图控制器方式 新建Model层 在Model层下新建一个user实体类 1 namespace XX.Model 2 { 3 public class tb_User 4 { 5 public string ID { get; set; } 6 public string UserName { get; set; } 7 public DateTime CreateTim…
如何使用EF CodeFirst连接MySql数据库? 我们这篇文章介绍怎么使用EF连接MySql 作者的环境 VS2017.Win10.MySql5.x 前言 一般在EF中,默认是使用SqlServer数据库. 为什么我们要使用Mysql呢? 一方面现在的数据库多种多样,发展到了非关系数据库.内存数据存储等,不得不用其他的软件: 另一方面C#很早也开始了开源与支持多平台(core)的路程 开始新建项目 我们这里新建的是WebApi项目,当然你喜欢什么类型项目都一样. 我们新建项目叫EfAndM…
现在我们来学习,当数据库初始化的时候,Code First怎样设置数据库的名字. 下面的图显示了数据库初始化的工作流程,根据传入给context基类的构造函数的参数来初始化: 根据上面的图,context基类的构造函数可以传入如下参数: 无参数 参数为数据库名称 参数为连接字符串 无参数的构造函数: 如果不传参数给context基类的构造函数,它就会在我们本地创建一个以{命名空间}.{Context类名}为名字的数据库.比如下面代码会创建一个名字为SchoolDataLayer.Context的…
EF CodeFirst简单实例这篇文章介绍了如何用EF去快速生成数据库.但是这个并没有生成到sqlserver中,总觉得不爽.下面就来讲一下,如何将数据库生成到sqlserver中. 按照EF CodeFirst简单实例中介绍的一步一步走,只是最后呢,需要在配置文件中加入connectionStrings的配置节即可. 配置文件如下: <?xml version="1.0" encoding="utf-8"?> <configuration>…
Code First中有三种不同的方法表示继承层次关系 1.Table per Hierarchy (TPH): 这种方法建议用一个表来表示整个类的继承层次关系,表中包含一个识别列来区分继承类,在EntityFramework中,这是默认的实现   类与数据库表的映射最简单的策略应该是:每个持久类对应一张表.这种方法听起来很简单,继承是一个可见的结构之间的不匹配的面向对象和关系世界,因为面向对象系统模型都是“is a”和“has a”的关系. SQL中的实体关系都是“has a”的关系.SQL数…
在ASP.NET MVC5 及 Visual Studio 2013 中为Identity账户系统配置数据库链接及Code-First数据库迁移 最近发布的ASP.NET MVC 5 及Visual Studio 2013中为我们带来的最显著的变化就是Identity 账户管理系统(原来使用ASP.NET Forms Membership).此外,还有一些Entity Framework Code-First数据库迁移的细微变化. 在这篇文章中,我们将回顾Identity账户管理系统的一些细节,…
这一节介绍EF CodeFirst模式中的1对0/1,1对多,多对多关系的配置,只有梳理清楚实体间的关系,才能进行愉快的开发,因此这节虽然很简单但是还是记录了一下. 1. 1对0/1关系配置 1. 通过数据注释属性配置1对0/1关系 我们将要实现一个Student和StudentAddress实体的1对0/1关系,1对0/1关系指的是一个Student可有一个或者零个住址StudentAddress,但是一个StudentAddress必须对应一个Student.在数据库中表现形式是Studen…