一、通过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配置属性和类型的更多相关文章

  1. Spring Boot 2 实践记录之 使用 ConfigurationProperties 注解将配置属性匹配至配置类的属性

    在 Spring Boot 2 实践记录之 条件装配 一文中,曾经使用 Condition 类的 ConditionContext 参数获取了配置文件中的配置属性.但那是因为 Spring 提供了将上 ...

  2. 外部配置属性值是如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五)

    注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 SpringBoot是如何实现自动配置的?--SpringBoot源码(四) 温故而知新,我们来简单回顾一下上 ...

  3. 使用 Fluent API 配置/映射属性和类型(摘自微软Data Access and Storage)

    使用 Fluent API 配置/映射属性和类型 使用实体框架 Code First 时,默认行为是使用一组 EF 中内嵌的约定将 POCO 类映射到表.但是,有时您无法或不想遵守这些约定,需要将实体 ...

  4. 使用Fluent API 配置/映射属性和类型

    Code First约定-Fluent API配置 使用Fluent API 配置/映射属性和类型 简介 通常通过重写派生DbContext 上的OnModelCreating 方法来访问Code F ...

  5. 使用 Fluent API 配置/映射属性和类型

    使用 Fluent API 配置/映射属性和类型 使用实体框架 Code First 时,默认行为是使用一组 EF 中内嵌的约定将 POCO 类映射到表.但是,有时您无法或不想遵守这些约定,需要将实体 ...

  6. 【配置属性】—Entity Framework 对应表字段的类型的设定配置方法

    摘自:http://www.cnblogs.com/nianming/archive/2012/11/07/2757997.html Entity Framework Code First的默认行为是 ...

  7. EF实体类配置总结

    实体类配置总结 Entity Framework 6 Code First 实践系列(1):实体类配置总结 2014-03-25 12:58 by TJerry, 719 阅读, 6 评论, 收藏,  ...

  8. EF Code First 导航属性 与外键(转载)

    EF Code First 导航属性 与外键 一对多关系 项目中最常用到的就是一对多关系了.Code First对一对多关系也有着很好的支持.很多情况下我们都不需要特意的去配置,Code First就 ...

  9. 11.翻译系列:在EF 6中配置一对零或者一对一的关系【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-fi ...

随机推荐

  1. Ansible 笔记 (3) - 编写 playbook

    playbook 相当于多个命令的编排组合然后一起运行,类似写脚本.在学习 playbook 之前需要了解 yaml 格式. 编写playbook的步骤: 定义主机与用户 编写任务列表 执行 play ...

  2. python5-常用模块

    collection 模块 # pypi 可以查询python的模块在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counte ...

  3. linux cpu过高原因及代码定位

    1. top命令查看CPU和内存占用率 top回车,然后按1 发现进程PID 35163 CPU和内存占用率都很高 top - 06:13:47 up  5:31,  1 user,  load av ...

  4. 使用Octopress博客 搭建博客

    Octopress介绍 Octopress是一款优秀的静态化博客系统,也是一个本地化的博客系统,之前部落在介绍免费开源Github Pages空间时有提到过Octopress,Github为我们提供长 ...

  5. 基于MATLAB的RGB转YCBCR色彩空间转换

    使用MATLAB进行图片的处理十分方便,看它的名字就知道了,矩阵实验室(matrix laboratory).一副图片的像素数据可以看成是一个二维数组一个大矩阵,MTABLAB就是为矩阵运算而生. M ...

  6. What if you are involved in an automobile accident in the US

    What if you are involved in an automobile accident in the US With increasing Chinese tourists and vi ...

  7. matlab 生成mat文件

    生成MAT文件 假如你的矩阵A.B都已赋值,现在需要将A,B矩阵保存成mat格式文件,执行如下命令:save mydata A B 就会把A B矩阵数据保存在yourdata.dat文件中了 保存指定 ...

  8. 跨终端Web

    1.终端vs设备 H5页面运行在同一设备的不同终端下. (1)Web浏览器. (2)微信.QQ浏览器. (3)移动App的Webview. (4)TV机顶盒. 2.跨终端的实现方式 (1)响应式 存在 ...

  9. Linux - 修改文件编码

    enca -L zh_CN -x UTF- file

  10. ASP.NET MVC 富文本Ueditor编辑 后台传值前端乱码解决方案

    只是将当前内容String当成Html插入,我想是跟数据类型转换差不多 //把内容赋值给ueditor var ue = UE.getEditor('editor');//实例化 ue.ready(f ...