.学习资料地址:
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. git将多个commit合并成一个新的commit

    问题: 有以下commit: 323udd ede234 6e7s6e 要合并第一个和第二个commit 方法有二: 方法一 使用git rebase -i hash-id,-i表示以交互模式进行co ...

  2. poj3164最小树形图模板题

    题目大意:给定一个有向图,根节点已知,求该有向图的最小树形图.最小树形图即有向图的最小生成树,定义为:选择一些边,使得根节点能够到达图中所有的节点,并使得选出的边的边权和最小. 题目算法:朱-刘算法( ...

  3. linux中find与rm实现查找并删除目录或文件

    linux 下用find命令查找文件,rm命令删除文件. 删除指定目录下指定文件find 要查找的目录名 -name .svn |xargs rm -rf 删除指定名称的文件或文件夹: find -t ...

  4. PHP-----------HTTP请求的第三方接口

    开发中常常遇到接口请求这个功能,后台也不例外,因为遇到了,所以写一篇. 前段时间做商城后台时,需要用到第三方物流接口查询物流信息. post: /**** * @param $url * @param ...

  5. sed:轻量级流编辑器

    一. sed命令 sed是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器.sed主要是用来将数据进行选取.替换.删除.新增的命令 注意:vi命令只能修改文件,但不能修改命令的结果,如 ...

  6. hdu3951巴什博弈变型

    参考博客:http://blog.csdn.net/sun897949163/article/details/50609070 特判一下m=1的情况,然后m!=1时,无论对手取多少,我只要取的让这条链 ...

  7. idea中解决Git反复输入代码的问题

    打开git终端,或者idea中的插件终端,输入命令: git config --global credential.helper store 借用一下别人的图不要介意哈.......... 执行上述命 ...

  8. java并发编程:线程安全管理类--原子操作类--AtomicLong

    可以用原子方式更新的 long 值.有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范.AtomicLong 可用在应用程序中(如以原子方式增加的序列号), ...

  9. HDU 1045 dfs + 回溯

    题目链接:http://acm.hrbust.edu.cn/vj/index.php?/vj/index.php?c=&c=contest-contest&cid=134#proble ...

  10. 为什么样本方差自由度(分母)为n-1

    一.概念.条件及目的 1.概念 要理解样本方差的自由度为什么是n-1,得先理解自由度的概念: 自由度,是指附加给独立的观测值的约束或限制的个数,即一组数据中可以自由取值的个数. 2.成立条件 所谓自由 ...