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

10-09 01:09
查看更多