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是怎么决定数据库的名字和服务的呢??? 下面的图,解释了这一切! ...
随机推荐
- Java堆(heap)、栈(stack)和队列的区别
Java里面Stack有两种含义: 一:数据结构 Stack,即java.util.Stack import java.util.Stack; import java.util.Iterator; i ...
- shell 判断文件是否存在,没有则创建
没有该文件则创建,有则 ls -l 输出文件信息. #!/bin/bash echo "enter the name:" read filename if test -e $fil ...
- Mac系统下adb工具的配置
sudo vim ~/.bash_profile 增加如下内容 ANDROID_HOME=/Users/apple/Library/Android/sdk export PATH=$PATH:$AND ...
- JVM知识总结-运行时区域划分
区域简介 JVM运行时区域有些随着虚拟机进程的启动而存在,有些依赖于用户线程的启动和结束而建立和销毁,大致分为以下几类:方法区,虚拟机栈,本地方法栈,堆,程序计数器,概念图如下(源于<深入理解J ...
- RabbitMQ入门_02_HelloWorld
A. AMQP基础 RabbitMQ 并不是基于 Java 开发人员熟悉的 JMS 规范设计开发的,而是基于一个比 JMS 更新更合理的 AMQP (Advanced Message Queuing ...
- 浅谈Android Studio3.0更新之路(遇坑必入)
>可以参考官网设置-> 1 2 >> Fantasy_Lin_网友评论原文地址是:简书24K纯帅豆写的我也更新一下出处[删除]Fa 转自脚本之家 浅谈Android Studi ...
- .net core部署到linux
1.Install the .NET SDK 我的服务器是腾讯云的Ubuntu 16 注册Microsoft密钥和订阅源 wget -q https://packages.microsoft.com/ ...
- win32程序应用mfc库
引入<afx.h> 此时会出现如下错误: #ifdef _DLL#ifndef _AFXDLL#error Building MFC application with /MD[d] (CR ...
- centos7 搭建svn服务器&客户端的访问&备份迁移
当今用于版本控制的软件程序主要的有svn和git,其它软件咱不熟悉,今天记录下搭建svn服务器和svn客户端使用: 使用环境:虚拟机为centos7系统,svn服务器安装在centos7系统平台上,s ...
- [置顶]
HashTable vs HashMap
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/76686891 HashTable vs HashMap 构造函数 hash函数 syn ...