我正在使用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