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 ...
随机推荐
- Shell 基本语法
一. Linux基本命令 1.1. cp命令 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,功能十分强大. 语法: cp [选项] 源文件或目录 目标文件或目录 1.2. mv命令 用户可 ...
- 字符串"k:1“” 处理成字典 {'k':1,'k1':2....}
1.有字符串"k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....} #第一种方法 s1 = "k:1|k1:2|k2:3|k3:4&q ...
- maven镜像
使用maven管理项目,下载依赖jar包的时候,经常会下载很慢,但是如果使用镜像的话,速度超级快~~只要在.m2/setting.xml文件中设置镜像就可以啦~ 本文来自https://yq.aliy ...
- iOS应用开发最佳实践
<iOS应用开发最佳实践> 基本信息 作者: 王浩 出版社:电子工业出版社 ISBN:9787121207679 上架时间:2013-7-22 出版日期:2013 年8月 开本:16 ...
- A Good Story for Great Friends
There once was a little girl who had a bad temper. Her mother gave her a bag of nails and told her t ...
- [program]编程习惯总结(2015_11_25)
1. 前端页面不要的数据,那么后端就不要发送到前端: 如:我们根据各个大洲来建立了一个个大洲的讨论区,但是在发表讨论页面.我们却希望用户去选择与当前帖子相关的国家标签. 那么,我们只需要在后台使用国家 ...
- C# 获取每一个像素点的RGB
int x, y; x = e.X; y = e.Y; Color pixel = MyImage.GetPixel(x, y); byte R = pixel.R; byte G = pixel.G ...
- ASP.Net Core 2.2 InProcess托管的Bug:unable to open database file
最近把项目更新到了ASP.Net Core 2.2,发布之后发现在IIS下使用SQLite数据库不行了,报异常说不能打开数据库."unable to open database file&q ...
- 在ASP.NET MVC中使用区域来方便管理controller和view
在ASP.NET MVC中使用区域来方便管理controller和view 在mvc架构中,一般在controllers和views中写所有控制器和视图, 太多控制器时候,为了方便管理,想要将关于pe ...
- java模板
public class max { public static void main(String[]args){ """ /* xxx */ ""& ...