一、什麼是DataAnnotation和Fluent API
1、DataAnnotation
EF Code First提供了一系列DataAnnotation特性,應用在類和屬性的上,這些特性將重寫默認的Convertions(約定),比如可以配置主鍵、長度、類型等;
2、Fluent API
Fluent API是另一種配置類和屬性的方法,並且提供了比DataAnnotation更多的配置功能。
二、配置屬性的長度
默認的約束不會設置屬性長度,將統一設置為max,如nvarchar(max)等,我們可以使用以下方法對屬性長度進行設置:
1、使用DataAnnotation對屬性長度進行約束:
l MaxLength(nn):可以應用於string或者Byte數組類型的屬性。配置後,對應數據庫字段長度將與之保持一致。
l MinLength(nn):這只是一個驗證特性,若屬性值長度大於此設置值,EF會拋出錯誤,它不會對數據庫字段的長度造成影響;
l StringLength(nn):只能應用於string類型屬性。配置後,對應數據庫字段長度將與之保持一致。
示例:
-
使用Fluent API對屬性長度進行約束:
Fluent API提供了HasMaxLength方法對屬性長度進行配置,示例如下:
modelBuilder.Entity<Address>().Property(p => p.City).HasMaxLength(50);
三、配置屬性數據庫類型
在默認約束下,EF將自動根據屬性類型設置對應的字段類型,對應關系如下:
l String ßà nvarchar(max)
l Integer ßà int
l Byte Array ßà varbiary(max)
l Boolean ßà bit
1、使用DataAnnotation對屬性數據庫類型進行約束:
使用Column特性進行約束,例如:
2、使用Fluent API對屬性數據庫類型進行約束:
在Fluent API中使用HasColumnType方法進行約束,例如:
需要注意的是,屬性類型與選擇的數據庫類型之間必須能自動轉化,否則將報錯。例如:將類型為string的屬性的數據庫類型設置int,EF將會提示錯誤。
四、配置是否為NULL
在默認約束下,EF會自動設置數據庫字段的是否可為NULL,規則如下:
l 主鍵列數據庫中自動設置為不可為NULL;
l 引用類型(如string)自動設置為可為NULL;
l 值類型(如datetime類型、所有的數值類型、bool等)自動設置為不可為NULL;
l Nullable<T>值類型自動設置為可為NULL;
若要改變默認規則,則可以采用以下方式進行:
1、使用DataAnnotation設置對應數據庫字段是否可為NULL:
采用Required特性進行設置,示例如下:
2、使用Fluent API設置對應數據庫字段是否可為NULL:
采用IsRequired方法進行設置,示例如下:
五、配置主鍵
默認約束規則可以設置主鍵,但是要遵循滿足以下任一規則:
l 屬性名稱是Id;
l 屬性名稱是類的名稱+Id;
若不符合以上規則,EF可能會因為不能設置主鍵而報錯,我們可以使用以下方式設置主鍵:
1、使用DataAnnotation設置主鍵:
在屬性上應用Key特性,以標識其為主鍵,示例如下:
2、使用Fluent API設置主鍵:
使用HasKey方法進行主鍵設置,示例如下:
【結束語】
本文主要介紹了使用DataAnnotation和Fluent API對屬性進行數據庫字段長度、類型、是否可為NULL、以及主鍵等進行重寫設置,滿足更多業務邏輯。在實際項目中,最好使用DataAnnotation或Fluent API進行顯示設置,一方面可以對領域類與數據庫之間映射進行精確描述,另一方面也提高了程序代碼的可讀性。