博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EF 通过DataAnnotations配置属性和类型
阅读量:5748 次
发布时间:2019-06-18

本文共 2266 字,大约阅读时间需要 7 分钟。

 一、通过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; }    }

以上是按照指定约束所生成的表

 

转载于:https://www.cnblogs.com/GreenLeaves/p/7589350.html

你可能感兴趣的文章
Linux 虚拟web相关
查看>>
UIPickerView的自定义视图
查看>>
Flash pixel Bender学习笔记
查看>>
apache2.4配置多个端口对应多个目录
查看>>
vue-router
查看>>
雷林鹏分享:codeigniter框架文件上传处理
查看>>
数据库连接
查看>>
Android开发学习——自定义View
查看>>
JQ使用Append添加html文本后再删除该html文本
查看>>
B/S与C/S结构的区别
查看>>
MathType中常见的两种符号的运用
查看>>
自动填充功能关闭解决表单input框屎黄色问题
查看>>
python_控制台输出带颜色的文字方法
查看>>
Java线程Thread的状态解析以及状态转换分析 多线程中篇(七)
查看>>
[十二]JavaIO之BufferedInputStream BufferedOutputStream
查看>>
java泛型中特殊符号的含义
查看>>
一秒 解决 ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql 问题
查看>>
linuxan安装redis出现Newer version of jemalloc required错误
查看>>
在centos7下用http搭建配置svn服务
查看>>
PHP APP端支付宝支付
查看>>