程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> EF Code First開-屬性配置

EF Code First開-屬性配置

編輯:關於C#
 

一、什麼是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類型屬性。配置後,對應數據庫字段長度將與之保持一致。
示例:
  1. 使用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進行顯示設置,一方面可以對領域類與數據庫之間映射進行精確描述,另一方面也提高了程序代碼的可讀性。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved