Code-First中配置域类

我们在前一节学习了默认的代码优先约定。Code-First使用默认约定从您的域类构建概念模型。Code-First利用称为约定而不是配置的编程模式。这意味着您可以通过配置您的域类来为EF提供所需的信息来覆盖这些约定。有两种方法来配置您的域类。

  1. DataAnnotations
  2. 流利的API

DataAnnotation

DataAnnotation是一个简单的基于属性的配置,您可以将其应用于您的域类及其属性。您可以在System.ComponentModel.DataAnnotations命名空间中找到大多数属性。但是,DataAnnotation仅提供Fluent API配置的一个子集。因此,如果您在DataAnnotation中找不到某些属性,则必须使用Fluent API进行配置。

例如:

我们后面详讲。

EF 6和EF Core中的数据注释属性:

数据注释属性是可以应用于实体类或属性的.NET属性,以覆盖EF 6和EF Core中的默认约定。

数据注解的属性被包括在System.ComponentModel.DataAnnotationsSystem.ComponentModel.DataAnnotations.Schema中EF 6以及EF核心的命名空间。这些属性不仅在实体框架中使用,而且还可以用于ASP.NET MVC或数据控件。

这些数据注释属性在EF 6和EF Core中以相同的方式工作,并且在两者中都是有效的。

Table

按照默认约定,EF 6创建与上下文类中的< DbSet <TEntity>属性名称> + s(或es)匹配的表名,EF Core创建与DbSet<TEntity>属性名称相同名称的Db列。

表格属性: [Table(string name, Properties:[Schema = string])

  • 名称:Db表的名称。
  • 架构:应在其中创建指定表的Db架构的名称。(可选的)

Column   列设置

按照EF 6和EF Core中的默认约定,它会在数据库表中创建一个与属性名称相同名称和顺序的列。

列属性: [Column (string name, Properties:[Order = int],[TypeName = string])

  • 名称:数据库表中列的名称。
  • 顺序:以零索引开始的列的顺序。(可选的)
  • TypeName:列的数据类型。(可选的)

Key    主键

默认约定为名称为Id或的属性创建主键列<Entity Class Name>Id。Key属性重写此默认约定。

在EF 6中,Key属性和Column属性可以应用于将在数据库中创建复合主键列的实体类的多个属性。EF Core不支持使用Key属性创建组合键。您必须HasKey()在EF Core中使用Fluent API 函数。

NotMapped   不映射

默认情况下,EF为实体类中的每个属性(必须具有;&set;)创建一个列。该[NotMapped]属性重写此默认约定。您可以申请[NotMapped]对您做一个或多个属性的属性希望在一个数据库表中创建一个相应的列。

ForeignKey       外键

按照默认约定,当EF的名称与相关实体的主键属性匹配时,EF将其作为外键属性。

外键签名: [ForeignKey(name string)]

  • 名称:关联的导航属性的名称或关联的外键的名称。

[ForeignKey]属性重写外键的默认约定它允许我们在依赖实体中指定名称与主体实体的主键属性不匹配的外键属性。

[ForeignKey(name)]属性可以以三种方式应用:

  1. [ForeignKey(NavigationPropertyName)] 在依赖实体中的外键标量属性上
  2. [ForeignKey(ForeignKeyPropertyName)] 在相关实体中的相关参考导航属性上
  3. [ForeignKey(ForeignKeyPropertyName)] 在主体实体的导航属性上

[ForeignKey]对依赖实体中的外键属性 ForeignKey("属性名")

实体的外键属性和相关导航属性名可以被指定作为参数

[ForeignKey]在依赖实体的导航属性中

应用于导航属性,并且可以指定相关的外键属性名称,

[ForeignKey]主要实体中的导航属性:

应用于主体实体中的导航属性,相关的外键属性名称可以在从属实体中指定

InverseProperty

当两个实体有多个关系时,使用InverseProperty属性。

遇到多个对象关系,这样是无法确定那个对应那个的

它自己不能识别,我们就手动让他们配对就行了,[InverseProperty]属性应用于两个集合导航属性,OnlineCoursesClassRoomCoursesCourse实体中指定其相关的导航属性

您可以使用[ForeignKey]attribute来配置外键名称

Required   非空验证

必需的属性可以在实体类被施加到一个或多个属性。EF将在数据库表中为应用了该Required属性的属性创建一个NOT NULL列。

MaxLength

MaxLength属性指定一个属性所允许的数据值的最大长度,该属性依次设置数据库中相应列的大小。它可以应用于实体的stringbyte[]属性。

StringLength

StringLength属性可以应用于string实体类的属性。它指定了字符串属性所允许的最大字符数,该字符串属性依次设置nvarchar数据库中相应列(在SQL Server中)的大小。

timestamp

EF 6和EF Core都包含Timestamp数据注释属性。它只能在实体类中应用一次到字节数组类型的属性

注:时间戳在数据库中执行添加,更新,时间戳字段会自动的更新值

ConcurrencyCheck

数据库表中的相应列将用于开放式并发检查使用where子句。EF将StudentName在UPDATE语句中包含列来检查乐观并发性。

注意:时间戳属性只能应用于单个字节数组属性,而ConcurrencyCheck属性可以应用于任何数量的任何数据类型的属性。

Code First 二 DataAnnotation 数据注解的更多相关文章

  1. [ASP.NET MVC]笔记(二) 数据注解和验证

    验证注解的使用 1.Required:必须字段 [Required] public string FirstName() { get; set; } 2.StringLength:长度限制,或是可选项 ...

  2. MVC-Model数据注解(二)-自定义

    由于系统的数据注解肯定不适合所有的场合,所以有时候我们需要自定义数据注解.         自定义数据注解有两种,一种是直接写在模型对象中,这样做的好处是验证时只需要关心一种模型对象的验证逻辑,缺点也 ...

  3. 9.2 翻译系列:数据注解特性之---Column【EF 6 Code First系列】

    原文链接:http://www.entityframeworktutorial.net/code-first/column-dataannotations-attribute-in-code-firs ...

  4. MVC5中Model层开发数据注解 EF Code First Migrations数据库迁移 C# 常用对象的的修饰符 C# 静态构造函数 MSSQL2005数据库自动备份问题(到同一个局域网上的另一台电脑上) MVC 的HTTP请求

    MVC5中Model层开发数据注解   ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证( ...

  5. Spring 3.1新特性之二:@Enable*注解的源码,spring源码分析之定时任务Scheduled注解

    分析SpringBoot的自动化配置原理的时候,可以观察下这些@Enable*注解的源码,可以发现所有的注解都有一个@Import注解.@Import注解是用来导入配置类的,这也就是说这些自动开启的实 ...

  6. Entity Framework(三):使用特性(数据注解)创建表结构

    一.理解Code First及其约定和配置 传统设计应用的方式都是由下而上的,即我们习惯优先考虑数据库,然后使用这个以数据为中心的方法在数据之上构建应用程序.这种方法非常适合于数据密集的应用或者数据库 ...

  7. ASP.NET MVC5----常见的数据注解和验证

    只要一直走,慢点又何妨. 在使用MVC模式进行开发时,数据注解是经常使用的(模型之上操作),下面是我看书整理的一些常见的用法. 什么是验证,数据注解 验证 从全局来看,发现逻辑仅是整个验证的很小的一部 ...

  8. Linux内核--网络栈实现分析(二)--数据包的传递过程--转

    转载地址http://blog.csdn.net/yming0221/article/details/7492423 作者:闫明 本文分析基于Linux Kernel 1.2.13 注:标题中的”(上 ...

  9. asp.net mvc3 数据验证(三)—自定义数据注解

    原文:asp.net mvc3 数据验证(三)-自定义数据注解         前两节讲的都是asp.net mvc3预先设定的数据注解,但是系统自由的数据注解肯定不适合所有的场合,所以有时候我们需要 ...

随机推荐

  1. 洛谷P3952 时间复杂度(模拟)

    题意 题目链接 Sol 咕了一年的题解..就是个模拟吧 考场上写的递归也是醉了... 感觉一年自己进步了不少啊..面向数据编程的能力提高了不少 #include<bits/stdc++.h> ...

  2. Echarts按需引入后没有显示图例问题

    因为Echarts官网的例子都是引入整个Echarts.js.如果使用按需引入对应模块就要记得引入legend模块,才能显示出图例. 例如这样: require("echarts/lib/c ...

  3. nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)解决方案

    前提:已经配置好静态IP以防万一,先安装好iptables服务(不管你装没装,先执行,免得后面添乱)[root@localhost ~]# yum install iptables-services[ ...

  4. VScode设置jsx语法自动补全

    1.打开VScode 2.文件>首选项>设置 3.加上以下配置项就可以了 "emmet.includeLanguages": { "javascript&qu ...

  5. 基于容器微服务的PaaS云平台设计(一) 实现容器微服务和持续集成

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://www.cnblogs.com/SuperXJ/ 前言:关于什么是容器微服务PaaS和容器微服务PaaS的 ...

  6. (转) 在PHP中使用全局变量

    简介 即使开发一个新的大型PHP程序,你也不可避免的要使用到全局数据,因为有些数据是需要用到你的代码的不同部分的.一些常见的全局数据有:程序设定类.数据库连接类.用户资料等等.有很多方法能够使这些数据 ...

  7. 程序员装B指南(转载)

    转自:http://www.oschina.net/question/615783_115390 一.准备工作 "工欲善其事必先利其器." 1.电脑不一定要配置高,但是双屏是必须的 ...

  8. Java基础之异常处理机制

    在Java中,异常分为编译时异常和运行时异常. 编译时异常又叫编译时被监测的异常:在程序编译过程中监测到非运行时异常的异常,出现该异常要么向上抛出,要么捕获处理.运行时异常(runtimeExcept ...

  9. javax.swing.JComponent 调用顺序

    网上截取的,感觉挺有用,记录下来. http://bbs.csdn.net/topics/310041707 java swing 感觉好复杂啊…………一点都不想用但是作业要用到 >_<; ...

  10. maven学习(四)maven的生命周期

    官网:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html maven有三套相互独立的生命周期, ...