我正在使用Entity Framework 4.3進行代碼優先開發,並且似乎沒有可能通過屬性註釋或其他任何方式表示CHECK constraint。我看到EF 5.0將會增加對checking enumerations的支持,但這並不完全是我在這之後所做的。是否可以表達檢查約束?
爲了給出一個簡化的例子,我想驗證所有Person
對象的名字都是「Bob」或「Harry」,並且都是5,10或30歲。
public class Person
{
[Required]
[Check("Bob", "Harry")] //yes, this attribute is imaginary
public string FirstName { get; set; }
[Required, Check(5, 30, 50)] //check is still imaginary
public int Age { get; set; }
}
我可以運行ALTER腳本事後添加這些限制,我可以推出自己的check屬性來進行驗證,但有什麼辦法,我缺少真正表達的非列舉CHECK約束實體框架?
我寫我自己的檢查屬性(看起來極其相似你的),但我的問題在於這是一個僅限於域的屬性 - 它並沒有在支持表實體中反映出來,同時也有一個檢查約束,就像字符串的MaxLength被反映到表結構中一樣。 – 48klocs 2012-03-06 18:47:08
我並不是那麼熟悉EF,但是我在ILSpy中打開了'EntityFramework.dll',它看起來像'System.Data.Entity.Internal.Validation.EntityValidatorBuilder'負責分析屬性並決定如何處理他們。看起來'RequiredAttribute','MaxLengthAttribute','StringLengthAttribute'和'DisplayAttribute'基本上被硬連線到數據庫創建過程中。我不確定是否有可能像現在一樣對EF進行如下操作。 – 2012-03-06 18:58:59