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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM