EF-CodeFirst系列100

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

Fluent API:
//Fluent API:要访问 Fluent API,需要在 DbContext 中重写 OnModelCreating 方法
将用户模型User中列CreateDate属性名映射为CurrCreateDate的数据库列
1.重写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);
        }
2.使用 Add-Migration ChangeDisplayName 命令搭建迁移,将这些更改应用于数据库。
3.运行 Update-Database 命令,将新迁移应用于数据库。
时间: 2024-08-25 07:27:04

EF-CodeFirst系列100的相关文章

Code-First 约定(EF Code-First系列)

前面,我们已经了解了Code-First利用领域类,怎么为我们创建数据库的简单示例.现在我们来学习一下Code-First约定吧. 什么是约定 约定说白了,就是基于一套规矩办事,这里就是基于你定义好的领域类,然后根据默认的规矩来配置概念模型.Code-First约定定义在这个命名空间下面: System.Data.Entity.ModelConfiguration.Conventions 现在来大致浏览一下都有哪些约定吧: 类型发现 在前面的章节中,我们在上下文类中创建了DbSet属性的类集合,

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

前面的例子中,我们已经看到了Code-First自动为我们创建数据库的例子. 这里我们将要学习的是,当初始化的时候,Code-First是怎么决定数据库的名字和服务的呢??? 下面的图,解释了这一切!!! 这个图解释了,数据库初始化的流程,是基于我们在上下文类中的构造函数中传递的参数. 在上面的图中,context类中的base构造器中,可以填入下面的参数: 无参数(No Parameter) 数据库的名字(Database Name) 连接字符串的名字(Connection String Na

EF CodeFirst系列(5)---FluentApi

1.FluentApi简介 EF中的FluentApi作用是通过配置领域类来覆盖默认的约定.在EF中,我们通过DbModelBuilder类来使用FluentApi,它的功能比数据注释属性更强大. 使用FluentApi时,我们在context类的OnModelCreating()方法中重写配置项,一个栗子: public class SchoolContext: DbContext { public DbSet<Student> Students { get; set; } protecte

[.NET领域驱动设计实战系列]专题一:前期准备之EF CodeFirst

一.前言 从去年已经接触领域驱动设计(Domain-Driven Design)了,当时就想自己搭建一个DDD框架,所以当时看了很多DDD方面的书,例如领域驱动模式与实战,领域驱动设计:软件核心复杂性应对之道和领域驱动设计C# 2008实现等书,由于当时只是看看而已,并没有在自己代码中进行实现,只是初步了解一些DDD分层的思想和一些基本概念,例如实体,聚合根.仓储等概念,今年有机会可以去试试面试一个架构岗位的时候,深受打击,当面试官问起是否在项目中使用过DDD思想来架构项目时,我说没有,只是了解

9.11 翻译系列:数据注解特性之--Timestamp【EF 6 Code-First系列】

9.11 翻译系列:数据注解特性之--Timestamp[EF 6 Code-First系列] 原文链接:https://www.entityframeworktutorial.net/code-first/TimeStamp-dataannotations-attribute-in-code-first.aspx EF 6和EF Core都包含TimeStamp数据注解特性.它只能用在实体的byte数组类型的属性上,并且只能用在一个byte数组类型的属性上.然后在数据库中,创建timestam

20.1翻译系列:EF 6中自动数据迁移技术【EF 6 Code-First系列】

原文链接:https://www.entityframeworktutorial.net/code-first/automated-migration-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 Code-First系列) 4

EF中的开放式并发(EF基础系列)

好久没更新EF这个系列了,现在又重新开始. 这次学习,开放式并发.首先拿出数据库脚本: 说明一下,这个数据库脚本是之前的章节中稍作修改的: USE [SchoolDB] GO /****** Object: Table [dbo].[Student] Script Date: 11/30/2015 21:42:07 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Student]( [Stu

1.Relationship in Entity Framework Using Code First Approach With Fluent API【使用EF Code-First方式和Fluent API来探讨EF中的关系】

In this article, you will learn about relationships in Entity Framework using the Code First Approach with Fluent API. 在这篇文章中,你将会学习到使用EF Code-First方式和Fluent API来探讨EF中的关系(一对一,一对多,多对多). Introduction[介绍] A relationship, in the context of databases, is a

新年奉献MVC+EF(CodeFirst)+Easyui医药MIS系统

本人闲来无事就把以前用Asp.net做过的一个医药管理信息系统用mvc,ef ,easyui重新做了一下,业务逻辑简化了许多,旨在加深对mvc,ef(codefirst),easyui,AutoMapper,Ninject等技术的理解和运用,今天拿出来跟大家分享,就是想对这些技术还处在入门阶段的朋友做以参考,以及正在用这些技术做项目的朋友做一个交流和探讨. 我会在此项目的基础上去逐一讲解这些技术,简单应用就不讲了,去看项目,主要讲重点难点以及需要注意的地方,有些地方不明白的可以去下载源代码,估计

Configure Many-to-Many(配置多对多关系)【Code-First系列】

现在学习EF Code-First多对多的配置. 这里我们举例:学生和班级实体,一个学生可以选修多个课程,多个学生也可以选修同一个课程. 一.使用数据注解特性,配置多对多的关系 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EF7 { public class Student { public