一、通過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; } }
以上是按照指定約束所生成的表