.学习资料地址:
CodeFirst:https://msdn.microsoft.com/zh-cn/data/jj193542 一.CodeFirst迁移(Migration)
.工具-->Nuget程序包管理器-->程序管理包控制台
`在程序包管理器控制台中运行Enable-Migrations(启用迁移)命令 (将这些更改应用于数据库)
一个新的 Migrations 文件夹已添加至项目中,它包含两个文件:
Configuration.cs — 此文件包含“迁移”将用来迁移 BloggingContext 的设置。在本演练中不需要进行任何更改,
但是,在此处可以指定种子数据、为其他数据库注册提供程序、更改生成迁移的命名空间等。 <时间戳>_InitialCreate.cs — 这是第一个迁移,它表示已经应用于数据库的更改。应用更改的目的是将其从空数据库迁移至包含博客
和文章表的数据库。尽管我们让 Code First 自动创建这些表,现在我们选择“迁移”(已转化为一次“迁移”)。
Code First 还在本地数据库中记录:该“迁移”已经应用。文件名中的时间戳用于排序
.更改模型:在控制台运行 Add-Migration AddCategorySort命令 (语法:Add-Migration 迁移名称)
Add-Migration 命令检查自上次迁移后是否有更改,并使用所有更改搭建新迁移。我们可以为迁移指定名称; .更新数据库:在控制台执行 Update-Database命令 (将新迁移应用于数据库)
此命令将所有挂起的迁移应用于数据库。InitialCreate 迁移已经应用,因此,这些迁移将仅应用新的 AddUrl 迁移。
提示:在调用 Update-Database 命令查看对数据库执行的 SQL 时,可以使用 –Verbose 开关。
注意:迁移数据库前必须将数据库上下文所在的类设置为启动项目,并且该项目下的配置文件里面有连接字符串 二.到目前为止,EF 发现了使用其默认约定的模型。但是,有时类不遵从约定,我们需要能够执行进一步配置。
对此有两种方法::数据注释,.Fluent API。
():数据注释
数据注释特性介绍地址 https://msdn.microsoft.com/zh-cn/library/system.componentmodel.dataannotations(v=vs.100).aspx .KeyAttribute:表示一个或多个用于唯一标识实体的属性。
示例:
[Key]设置该属性为主键
public string Id { get; set; }
.StringLengthAttribute:指定数据字段中允许的最小和最大字符长度
示例:
[StringLength(maximumLength:,MinimumLength =)] 设置该属性允许的最大字符串长度为250和最小字符串长度150
public string Name { get; set; }
.MaxLengthAttribute 指定属性中允许的数组或字符串数据的最大长度。
示例:
[MaxLength()]
public string PassWord { get; set; }
.ConcurrencyCheckAttribute:指定某属性将参与开放式并发检查。
示例:
[ConcurrencyCheck] 一般用于控制并发
public string OrderId { get; set; }
.RequiredAttribute :指定需要数据字段值。
示例:
[Required] 一般用不为空
public string Name { get; set; }
.TimestampAttribute:将列的数据类型指定为行版本。
.ComplexTypeAttribute:表示该类是复杂类型。 复杂类型是实体类型的非标量属性,实体类型允许在实体内组织标量属性。 复杂类型没有键,并且实体框架不能脱离父对象来管理复杂类型。
.ColumnAttribute:表示数据库列属性映射。 需要引入using System.ComponentModel.DataAnnotations.Schema;命名空间
示例:
[Column(name:"CreateTime")]
public DateTime CreateDate { get; set; }
.TableAttribute:指定类将映射到的数据库表。
示例:
[Table(name:"UserInfo")] 指定表的名称
public class User
.InversePropertyAttribute:指定表示同一关系的另一端的导航属性的反向属性。
.ForeignKeyAttribute:表示关系中用作外键的属性。 注释在外键属性。属性导航可能会放置和指定关联导航属性名称或者放置并指定与外键名称。
示例:
[ForeignKey("RoleId")]
public string RoleId { get; set; }
.DatabaseGeneratedAttribute:指定数据库生成属性值的方式。
示例:
[DatabaseGenerated(databaseGeneratedOption: DatabaseGeneratedOption.Identity)] 定义主键生成的方式
public int Id { get; set; }
.NotMappedAttribute:表示应从数据库映射中排除属性或类。
示例:
[NotMapped](该字段不会映射到数据库的列)
public int Sort { get; set; } ()Fluent API:

Fluent API:
//Fluent API:要访问 Fluent API,需要在 DbContext 中重写 OnModelCreating 方法
将用户模型User中列CreateDate属性名映射为CurrCreateDate的数据库列
.重写OnModelCreating方法,并添加如下代码。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();//移除复数表名的契约 //将User表中CreateDate列名映射为CurrCreateDate
modelBuilder.Entity<User>().Property(u => u.CreateDate).HasColumnName("CurrCreateDate"); base.OnModelCreating(modelBuilder);
}
.使用 Add-Migration ChangeDisplayName 命令搭建迁移,将这些更改应用于数据库。
.运行 Update-Database 命令,将新迁移应用于数据库。 CodeFirst共有两种方式迁移:1.基于代码的迁移、2.自动迁移
基于代码的迁移:vs-->工具-->Nuget程序包管理器-->程序管理包控制台-->Enable-Migrations-->更改实体模型-->Add-Migrations 名称-->Update-Database
自动迁移:vs-->工具-->Nuget程序包管理器-->程序管理包控制台-->Enable-Migrations –EnableAutomaticMigrations -->更改实体模型-->Update-Database
注意:借助自动迁移功能,您无需对您所做的每一个更改都在项目中配备一个代码文件,就可使用 Code First 迁移。并不是所有更改都能自动应用,举例来说,重命名列就需要基于代码进行迁移。

EF-CodeFirst系列100的更多相关文章

  1. EF CodeFirst系列(3)---EF中的继承策略(暂存)

    我们初始化数据库一节已经知道:EF为每一个具体的类生成了数据库的表.现在有了一个问题:我们在设计领域类时经常用到继承,这能让我们的代码更简洁且容易管理,在面向对象中有“has  a”和“is a”关系 ...

  2. EF CodeFirst系列(6)---配置1对1,1对多,多对多关系

    这一节介绍EF CodeFirst模式中的1对0/1,1对多,多对多关系的配置,只有梳理清楚实体间的关系,才能进行愉快的开发,因此这节虽然很简单但是还是记录了一下. 1. 1对0/1关系配置 1. 通 ...

  3. 2.简单的Code First例子(EF Code-First系列)

    现在假想,我们想要为讴歌学校创建一个应用程序,这个程序需要能够来添加或者更新学生,分数,教师还有课程信息. 代替之前我们的做法:先是创建数据库,现在我们不这么做,我们先来创建领域类,首先我来创建两个简 ...

  4. 3.Code-First 约定(EF Code-First系列)

    前面,我们已经了解了Code-First利用领域类,怎么为我们创建数据库的简单示例.现在我们来学习一下Code-First约定吧. 什么是约定 约定说白了,就是基于一套规矩办事,这里就是基于你定义好的 ...

  5. 6.Configure Domain Classes(配置领域类)【EF Code-First 系列】

    在前面的部分中,我们学习了Code-First默认约定,Code-First使用默认的约定,根据你的领域类,然后生成概念模型. Code-First模式,发起了一种编程模式:约定大于配置.这也就是说, ...

  6. EF CodeFirst系列(1)---CodeFirst简单入门

    1.什么是CodeFirst 从EF4.1开始,EF可以支持CodeFirst开发模式,这种开发模式特别适用于领域驱动设计(Domain Driven Design,大名鼎鼎的DDD).在CodeFi ...

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

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

  8. EF CodeFirst系列(7)---FluentApi配置存储过程

    FluentApi配置存储过程 1.EF自动生成存储过程 EF6的CodeFirst开发模式支持给实体的CUD操作配置存储过程,当我们执行SaveChanges()方法时EF不在生成INSERT,UP ...

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

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

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

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

随机推荐

  1. RabbitMQ 流程以及一些命令

    流程: producer&Consumer producer指的是消息生产者,consumer消息的消费者. Queue 消息队列,提供了FIFO的处理机制,具有缓存消息的能力.rabbitm ...

  2. CodeForces 838A Binary Blocks(前缀和)题解

    题意:给你个n*m的矩阵,要求你找到一个k,k > 1,使得矩阵可以分为很多k * k的小正方形,然后进行操作把每个小正方形都变为0或1,问你怎样使操作数最小. 思路:随便暴力不可取,显然你每次 ...

  3. 使用IDEA创建基于Gradle构建的JavaWeb项目

    环境配置 jdk: 1.8 Gradle: 4.4.1 Tomcat: 9.0.0 One Step! 创建项目,初始化项目结构. 打开我们的IDEA,进入创建项目的界面,勾选Java,Web两个选项 ...

  4. Pandas 练习题

    1. 使用 pandas 中的函数,下载上证综指过去一段时间的数据,进行数据探索. 上证综指,全称是上海证券综合指数,是以上证所挂牌上市的全部股票为计算范围,以发行量为权数的加权综合股价指数.这一指数 ...

  5. iframe.contentWindow介绍

    一.在使用iframe的页面,要操作这个iframe里面的DOM元素可以用: contentWindow.contentDocument(测试的时候chrome浏览器,要在服务器环境下) 1.先获取i ...

  6. mybatis 环境搭建和基本说明

    mybatis介绍就不多提了,直接步入正题. 先准备好eclipse和MySQL,然后先看一下目录结构 文件和类很少,所以mybatis的搭建是非常简单的,如搭建中遇到问题可以先参考文档最后一部分的综 ...

  7. C#正则_取出标签内的内容(非贪婪)

    using System.Text.RegularExpressions; /// <summary>        /// 执行正则提取出值        /// </summar ...

  8. hdu4289最小割

    最近博客断更了一段时间啊,快期末了,先把这个专题搞完再说 最小割=最大流 拆点方法很重要,刚开始我拆点不对就wa了,然后改进后tle,应该是数组开小了,一改果然是 #include<map> ...

  9. uva10944 状态压缩bfs or DP

    又是一道状压搜索,题解有的是状压DP做的目前不会日后补 写好了以后一直蜜汁WA,看别人代码把判断再次回到原点的语句写在了Q.pop()之后而不是for里,对我也是一种启发吧这样写确实有好处比如起点就是 ...

  10. HDU 4751 Divide Groups (2-SAT)

    题意 给定一个有向图,问是否能够分成两个有向完全图. 思路 裸的2-sat--我们设一个完全图为0,另一个完全图为1,对于一个点对(u, v),如果u.v不是双向连通则它们两个不能在一组,即u和v至少 ...