我正在使用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; }
}
我可以在事实发生后运行更改脚本来添加这些约束,并且可以滚动自己的check属性来执行验证,但是有什么方法可以在 Entity Framework 中实际表达未枚举的CHECK约束呢?
最佳答案
您可以自己写一个(未经测试):
public class CheckAttribute : System.ComponentModel.DataAnnotations.ValidationAttribute
{
object[] ValidValues;
public CheckAttribute<T>(params T[] validValues)
{
ValidValues = validValues;
}
public override bool IsValid(object value)
{
return ValidValues.FirstOrDefault(v => v.Equals(value)) != null;
}
}
关于c# - 是否可以表达检查约束?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9588606/