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(30)]
public string Name { get; set; }
(2)、最大长度约束,通过MaxLengthAttribute,代码如下:
[MaxLength(30)]
public string Name { get; set; }
(3)、最小长度约束,通过MinLengthAttribute,代码如下:
[MinLength(30)]
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(32)]
public string Name { get; set; }
[Required,Column("CTime")]
public DateTime CreateTime { get; set; }
[Column(TypeName = "ntext"), MaxLength(20), MinLength(10)]
public string Remark { get; set; }
[NotMapped]
public string NotNeed { get; set; }
}
以上是按照指定约束所生成的表
- LinearLayout(线性布局)
- 服务化了,没想到耦合更加严重?
- 利用好注册的域名
- Android中TextView
- 腾讯 DCI 上线基于集中控制的 SR-TE 方案
- 如何从VS2003升级到VS2008
- js中多个Date对象变量间赋值互相影响
- 并发编程之Executor,Executors,ExecutorService和ThreadPoolExecutor
- 【DeveMobile实例】d3.js 与Trianglify 制作SVG格式Low-Poly 特效
- 未来人工智能将把人类分为3层,而你会在哪一层呢?
- IIS 7.0探索用于 Windows Vista 的 Web 服务器和更多内容
- 初学Python 之抓取当当网图书页面目录并保存到txt文件
- JavaScript 基础(二)数组
- 限制扫码付款额度,支付宝和微信要被“祭旗”?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在Centos上搭建Maven中央仓库的方法
- 详解Ubuntu16.04启动器图标异常解决方法
- Linux(ubuntu)下实现增加/删除文件权限
- Vim中文件编码处理与重新打开乱码文件详解
- Linux常用命令mkdir详解
- CentOS6.5环境下使用rsync增量同步备份文件的方法
- Linux 搭建Git服务器的方法
- Linux中无法远程连接数据库问题的解决方法
- VIM实现文件快速跳转插件详解
- 详解linux usb host驱动编写入门
- CentOS服务器平台搭建mysql主从复制与读写分离的方法
- Centos7中添加、删除Swap交换分区的方法
- Bash中文件描述符的详细介绍
- Linux 块设备驱动代码编写
- ubuntu中终端命令提示符太长的修改方法汇总