EF 通过DataAnnotations配置属性和类型

  • 一、通过Attribute配置约束
  1. 主键约束
    通过KeyAttribute来配置主键约束,代码如下:
[Key]
public int PrimaryKey{ get; set; }
  1. 外键约束
    通过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; }

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、复杂类型约束
请参考
14、示例

  [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; }
   }


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

posted @   搭车去柏林  阅读(94)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示