EF-CodeFirst系列100
.学习资料地址:
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的更多相关文章
- EF CodeFirst系列(3)---EF中的继承策略(暂存)
我们初始化数据库一节已经知道:EF为每一个具体的类生成了数据库的表.现在有了一个问题:我们在设计领域类时经常用到继承,这能让我们的代码更简洁且容易管理,在面向对象中有“has a”和“is a”关系 ...
- EF CodeFirst系列(6)---配置1对1,1对多,多对多关系
这一节介绍EF CodeFirst模式中的1对0/1,1对多,多对多关系的配置,只有梳理清楚实体间的关系,才能进行愉快的开发,因此这节虽然很简单但是还是记录了一下. 1. 1对0/1关系配置 1. 通 ...
- 2.简单的Code First例子(EF Code-First系列)
现在假想,我们想要为讴歌学校创建一个应用程序,这个程序需要能够来添加或者更新学生,分数,教师还有课程信息. 代替之前我们的做法:先是创建数据库,现在我们不这么做,我们先来创建领域类,首先我来创建两个简 ...
- 3.Code-First 约定(EF Code-First系列)
前面,我们已经了解了Code-First利用领域类,怎么为我们创建数据库的简单示例.现在我们来学习一下Code-First约定吧. 什么是约定 约定说白了,就是基于一套规矩办事,这里就是基于你定义好的 ...
- 6.Configure Domain Classes(配置领域类)【EF Code-First 系列】
在前面的部分中,我们学习了Code-First默认约定,Code-First使用默认的约定,根据你的领域类,然后生成概念模型. Code-First模式,发起了一种编程模式:约定大于配置.这也就是说, ...
- EF CodeFirst系列(1)---CodeFirst简单入门
1.什么是CodeFirst 从EF4.1开始,EF可以支持CodeFirst开发模式,这种开发模式特别适用于领域驱动设计(Domain Driven Design,大名鼎鼎的DDD).在CodeFi ...
- EF CodeFirst系列(2)---CodeFirst的数据库初始化
1. CodeFirst的默认约定 1.领域类和数据库架构的映射约定 在介绍数据库的初始化之前我们需要先了解领域类和数据库之间映射的一些约定.在CodeFirst模式中,约定指的是根据领域类(如Stu ...
- EF CodeFirst系列(7)---FluentApi配置存储过程
FluentApi配置存储过程 1.EF自动生成存储过程 EF6的CodeFirst开发模式支持给实体的CUD操作配置存储过程,当我们执行SaveChanges()方法时EF不在生成INSERT,UP ...
- EF CodeFirst系列(9)---添加初始化数据和数据库迁移策略
1.添加初始化数据(Seed) 我们可以在初始化数据库的过程中给数据库添加一些数据.为了实现初始化数据(seed data)我们必须创建一个自定义的数据库初始化器(DB initializer),并重 ...
- 4.DB Initialization(数据库初始化)[EF Code-First系列]
前面的例子中,我们已经看到了Code-First自动为我们创建数据库的例子. 这里我们将要学习的是,当初始化的时候,Code-First是怎么决定数据库的名字和服务的呢??? 下面的图,解释了这一切! ...
随机推荐
- 关于spring框架工作原理的初解
一:spring基本概念 1)struts2是web框架,hibernate是orm框架 2)spring是容器框架,创建bean,维护bean之间的关系 3)spring可以管理web层,持久层,业 ...
- [Microsoft][ODBC Microsoft Access Driver] 参数不足,期待是 1
真tm坑. QString execStr = QString("SELECT * FROM [Log] WHERE [username]=\"yyy\" ") ...
- POJ 2288 Islands and Bridges(状压dp)
http://poj.org/problem?id=2288 题意: 有n个岛屿,每个岛屿有一个权值V,一条哈密顿路径C1,C2,...Cn的值为3部分之和: 第1部分,将路径中每个岛屿的权值累加起来 ...
- Codeforces Round #419 (Div. 2) B. Karen and Coffee(经典前缀和)
http://codeforces.com/contest/816/problem/B To stay woke and attentive during classes, Karen needs s ...
- BZOJ 2756 【SCOI2012】 奇怪的游戏
题目链接:奇怪的游戏 一开始这道题想岔了……想到黑白染色后对总格子数按奇偶性分类讨论,然后没发现奇数个格子的可以直接解方程…… 首先可以发现每次操作是给相邻的两个格子权值加一,因此我们把棋盘黑白染色后 ...
- 代码注释,神兽护体,代码无bug
/** * * ━━━━━━神兽出没━━━━━━ * ┏┓ ┏┓ * ┏┛┻━━━┛┻┓ * ┃ ┃ * ┃ ━ ┃ * ┃ ┳┛ ┗┳ ┃ * ┃ ┃ * ┃ ┻ ┃ * ┃ ┃ * ┗━┓ ┏━┛ ...
- PHP如何生成文章预览图
PHP如何生成文章预览图 一.总结 一句话总结:php的wkhtmltox扩展,php官方文档有怎么使用,或者github,或者百度,等等等等 wkhtmltox 1.PHP如何自动生成文章预览图? ...
- MySQL查询in操作排序
in操作排序 先说解决方案: select * from test where id in(3,1,5) order by field(id,3,1,5); 或许有人会注意过,但我以前真不知道 SQL ...
- activemq、rabbitmq、kafka原理和比较
一.activemq 虽然是java写的消息队列,但是提供Java, C, C++, C#, Ruby, Perl, Python, PHP各种客户端,所以语言上是没什么问题的.配置和使用,基本上是j ...
- mysql 判断表字段是否存在,然后修改
-- ---------------------------- -- 判断 vrv_paw_rule 表是否存在 thresholdMin 字段,不存在则添加; 存在则修改字段类型 DELIMITER ...