唯一行的驗證所以我有一個實體EmployeeRegion
Asp.net MVC,弱實體
EmployeeRegion
是一個弱實體從表Region
和Employee
複合鍵。
我有一個員工檔案,他們可以將自己添加到一個地區。他們得到一個下拉與地區
我做了一通,我得到的模型符合一種建立在以Asp.net MVC數據驗證的東西應有盡有。這很好,因爲驗證(使用註釋)向最終用戶顯示非常棒的錯誤消息。
如何使用註釋驗證組合鍵是否唯一,如果不是,則顯示錯誤消息?
唯一行的驗證所以我有一個實體EmployeeRegion
Asp.net MVC,弱實體
EmployeeRegion
是一個弱實體從表Region
和Employee
複合鍵。
我有一個員工檔案,他們可以將自己添加到一個地區。他們得到一個下拉與地區
我做了一通,我得到的模型符合一種建立在以Asp.net MVC數據驗證的東西應有盡有。這很好,因爲驗證(使用註釋)向最終用戶顯示非常棒的錯誤消息。
如何使用註釋驗證組合鍵是否唯一,如果不是,則顯示錯誤消息?
基本上,你只需要:
public class EmployeeRegion
{
[Key, Column(Order = 1)]
public int EmployeeId { get; set; }
public virtual Employee Employee { get; set; }
[Key, Column(Order = 2)]
public int RegionId { get; set; }
public virtual Region Region { get; set; }
}
換句話說,你缺少的部分是[Key, Column(Order = N)]
。這使得id成爲一個實際的組合鍵,它開箱即不會允許重複。
但是,所有這些都會使API在處理這種M2M關係時變得更加困難。如果表中的唯一數據是關鍵,有沒有需要的關係附加數據的有效載荷,那麼你應該擺脫這種實體的,只是讓EF處理的關係:
public class Employee
{
...
public virtual ICollection<Region> Regions { get; set; }
}
public class Region
{
...
public virtual ICollection<Employee> Employees { get; set; }
}
在幕後,EF將創建一個類似於EmployeeRegion
的表格,但您不需要負責管理該表格,並且確保獨特關係等內容將被烘焙。這也爲您提供了一個更容易處理的API。例如。爲了讓所有的員工一個區域,目前,你必須做一些事情,如:
dbo.EmployeeRegions.Where(m => m.Region.Id == regionId).Select(m => m.Employee)
然而,通過允許EF來處理它,你可以這樣做:
region.Employees
給你的表(和實體)一個複合唯一索引。 – DavidG
你能詳細說明一下嗎? –
你能展示你的實體最初的樣子嗎? – DavidG