此篇紀錄 EF 的模型驗證特性與模型類別。
依據模型驗證的特性在前端的View也會依據相關的設定產生出對應的驗證。
好站推薦 :
code first 開發第一步
ASP.net MVC Model篇—資料驗證
欄位名稱的屬性(Attributes)設定
範例 :
public class TbStruct
{
[Attributes]
public int Id { get; set; };
}
相關特性 :
- [Key] : 該欄位為主索引鍵必須為Int的資料型態
- [Index([name],[order],[IsClustered],[IsUnique]) :
a. name : 索引名稱。
b. order : 多欄位時的順序
c. IsClustered : 是否為叢集索引
d. IsUnique : 是否為唯一索引 - [Required] : 為必填
- [Display(Name = "XXX")] : 此為在View中的模型可以使用的值。
- [StringLength(3)] : 指定欄位長度 只能等於 3
- [MaxLength(50)] : 欄位最大寬度為50適用於資料型態為 string
- [NotMapped] : 欄位不需要建立於資料庫中。可能是特殊需求供程式內部使用
- [Range(30, 300,ErrorMessage ="請輸入在預設範圍")] : 數字欄位的範圍做限制
- [Compare("ColumnNmae")] : 比對兩個欄位值是否相同
- [MembershipPassword] : 指定需要輸入高強度的密碼
- ※[Remote(多載)] : 將該欄位的值透過Ajax的方式指定到特定方法來驗證
該屬性設定事告知Entity 這些欄位的值要特殊處理 :
[DatabaseGenerated(DatabaseGeneratedOption.Computed)] :
該欄位的值在資料庫中有預設值,UPD時不異動該資料欄位
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] :
該欄位需要自動加序號的功能 類似[Key] 但不是主索引鍵
[DatabaseGenerated(DatabaseGeneratedOption.None)] :
該欄位雖然是 [Key] 但不讓它自動增加序號
建立 1 to N 或 N to N 關聯 :
namespace Erp.Models
{
///以下會產生一對多的情形 :
/// Member 1------->N Order
public class Member
{
public virtual ICollection<Order> Order { get; set; }
}
public class Order
{
public virtual Member Member { get; set; }
}
}
namespace Erp.Models
{
/// 以下會產生多對多的情形 :
/// Member 1------->N [MemberAndOrder] N<------1 Order
public class Member
{
public virtual ICollection<Order> Order { get; set; }
}
public class Order
{
public virtual ICollection<Member> Member { get; set; }
}
}
使用關聯的好處,若在一對多的情形下如用linq對模型類別取值時不需要自己建立起關聯查詢,EF有延時查詢的機制主要關鍵點就是在 1toN,NtoN的欄位 關鍵字"virtual"
EX :
using (Erp.Models.TbEntities db = new Erp.Models.TbEntities())
{
// 使用N的那個表格可直接取得對應關聯資料表的值
var value = db.Order.Member.ColumnName;
}
{
// 使用N的那個表格可直接取得對應關聯資料表的值
var value = db.Order.Member.ColumnName;
}
多多指教!! 歡迎交流!!
你不知道自己不知道,那你會以為你知道