EF 通过DataAnnotations配置属性和类型
一、通过Attribute配置约束
1、主键约束
通过KeyAttribute来配置主键约束,代码如下:
[Key]
public int PrimaryKey{ get; set; }
2、外键约束
通过ForeignKeyAttribute来配置外键约束,代码如下:
[Key]
public int PrimaryKey{ get; set; }
[ForeignKey("ForeignKey")]
public int PrimaryKey{ get; set; }
注意,指定列名存在(外键必须存在),如上面的ForeignKey,则类中必须存在名称为ForeignKey的属性。
3、长度约束
(1)、普通长度约束,通过StringLengthAttribute来配置普通长度约束,代码如下:
[StringLength()]
public string Name { get; set; }
(2)、最大长度约束,通过MaxLengthAttribute,代码如下:
[MaxLength()]
public string Name { get; set; }
(3)、最小长度约束,通过MinLengthAttribute,代码如下:
[MinLength()]
public string Name { get; set; }
4、非空约束
非空约束比较简单,通过RequiredAttribute,代码如下:
[Required]
public string Name{ get; set; }
5、数据类型约束
通过初始化ColumnAttribute类的TypeName属性来配置数据类型约束,代码如下:
[Column(TypeName="byte")]
public string Photo{get;set;}
6、字段名约束
通过初始化ColumnAttribute类的带string参数的构造函数设置,代码如下:
[Column("CTime")]
public DateTime CreateTime { get; set; }
7、表名约束
通过TableAttribute类的带string参数的构造函数设置,代码如下:
[Table("Class")]
public class ClassInfo
{}
8、列值GUID化
当主键值需要自GUID化,则需要在对主键字段设置主键约束的基础上追加DatabaseGenerated特性,代码如下:
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public GUID Id{ get; set; }
如果没有设置列值GUID化,数据库中会以0来填充

第二行就会报错,因为设置了Id为主键
9、列值+DatabaseGeneratedOption.Computed
[Key,DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public GUID Id{ get; set; }
如果将属性标识为Computed,EF会认为该列是通过其它列计算得出的,不会将其持久化到数据库中。
10、列值+DatabaseGeneratedOption.None
[Key,DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id{ get; set; }
这个就等同于Id主键自增效果
11、忽略列映射
当实体类中定义了某些字段,这些字段是通过一些计算或者合并得到的,我们并不需要将它同步到数据库中,就可以通过配置不让它生成到数据库中,EF中通过NotMappedAttribute特性来设置,代码如下:
[NotMapped]
public string NotNeeded { get; set; }
12、忽略表映射
忽略表映射和忽略列映射一样. 代码如下:
[NotMapped]
public class ClassInfo
{}
13、复杂类型约束
12、示例
[Table("Class")]
public class ClassInfo
{
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[Required,StringLength()]
public string Name { get; set; }
[Required,Column("CTime")]
public DateTime CreateTime { get; set; }
[Column(TypeName = "ntext"), MaxLength(), MinLength()]
public string Remark { get; set; }
[NotMapped]
public string NotNeed { get; set; }
}

以上是按照指定约束所生成的表
EF 通过DataAnnotations配置属性和类型的更多相关文章
- Spring Boot 2 实践记录之 使用 ConfigurationProperties 注解将配置属性匹配至配置类的属性
在 Spring Boot 2 实践记录之 条件装配 一文中,曾经使用 Condition 类的 ConditionContext 参数获取了配置文件中的配置属性.但那是因为 Spring 提供了将上 ...
- 外部配置属性值是如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五)
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 SpringBoot是如何实现自动配置的?--SpringBoot源码(四) 温故而知新,我们来简单回顾一下上 ...
- 使用 Fluent API 配置/映射属性和类型(摘自微软Data Access and Storage)
使用 Fluent API 配置/映射属性和类型 使用实体框架 Code First 时,默认行为是使用一组 EF 中内嵌的约定将 POCO 类映射到表.但是,有时您无法或不想遵守这些约定,需要将实体 ...
- 使用Fluent API 配置/映射属性和类型
Code First约定-Fluent API配置 使用Fluent API 配置/映射属性和类型 简介 通常通过重写派生DbContext 上的OnModelCreating 方法来访问Code F ...
- 使用 Fluent API 配置/映射属性和类型
使用 Fluent API 配置/映射属性和类型 使用实体框架 Code First 时,默认行为是使用一组 EF 中内嵌的约定将 POCO 类映射到表.但是,有时您无法或不想遵守这些约定,需要将实体 ...
- 【配置属性】—Entity Framework 对应表字段的类型的设定配置方法
摘自:http://www.cnblogs.com/nianming/archive/2012/11/07/2757997.html Entity Framework Code First的默认行为是 ...
- EF实体类配置总结
实体类配置总结 Entity Framework 6 Code First 实践系列(1):实体类配置总结 2014-03-25 12:58 by TJerry, 719 阅读, 6 评论, 收藏, ...
- EF Code First 导航属性 与外键(转载)
EF Code First 导航属性 与外键 一对多关系 项目中最常用到的就是一对多关系了.Code First对一对多关系也有着很好的支持.很多情况下我们都不需要特意的去配置,Code First就 ...
- 11.翻译系列:在EF 6中配置一对零或者一对一的关系【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-fi ...
随机推荐
- 函数作用域和块级作用域--你不知道的JavaScript
et和const在{}内声明都会变为外部不能访问的值,但是const声明的是常量,也不能修改 函数是 JavaScript 中最常见的作用域单元.本质上,声明在一个函数内部的变量或函数会在所处的作用域 ...
- 解决Web Uploader上传文件和图片 延迟和not defined
1.出现list not define时,var $list = $("#fileList"); 2.选择文件框有延迟,可能是因为选择文件类型过多 mimeTypes: 'imag ...
- html 源码 引入样式
post-title2 示例 sdf post-title 示例
- MFC自动生成代码详解(一)
首先声明这篇博客是给MFC刚刚上路的coder准备的,老鸟们就自觉无视我吧! 大家有没有感觉,创建MFC工程时他总会生成一大堆文件一大堆代码.虽然给我们带来了便利,但是调试的时候碰到这些代码总是畏首畏 ...
- Hibernate的查询方式汇总
分别是HQL查询,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询. 如果单纯的使用hibernate查询数据库只需要懂其中的一项就可以完成想要 ...
- 为spring代理类设置属性值
现在有一个bean包含了私有属性,如下: @Component public class Bean { String name; public String getName() { return na ...
- Centos 7 安装 FFmpeg
Step 1: Update the system sudo yum install epel-release -y sudo yum update -y sudo shutdown -r now S ...
- 3D空间中射线与三角形的交叉检测算法【转】
引言 射线Ray,在3D图形学中有很多重要的应用.比如,pick操作就是使用射线Ray来实现的,还有诸如子弹射线的碰撞检测等等都可以使用射线Ray来完成.所以,在本次博客中,将会简单的像大家介绍下,如 ...
- HttpClient4.X发送Get请求的url参数拼接
HttpClient4.X发送Get请求的参数拼接 使用httpClient发送get请求时,请求参数可以以?key=val&key1=val1的拼接到url后面. 但是请求参数较多时,这种方 ...
- datename和datepart
select datename(year, getdate()) + 'aaa11' --不报错 datename返回的是nvarchar类型 select datalength(datename(y ...