实体框架上的剃刀类验证

时间:2012-08-29 13:21:50

标签: c# asp.net-mvc entity-framework razor

关于最佳做法的快速提问。

我有一个项目MVC3 + razor,在我的课上,在我的每个属性上,我都有一些这样的验证:

    [StringLength(20)]
    [RegularExpression(@"^[1-9][0-9]*$",ErrorMessage="Only Numbers Allowed") ]
    [Required(AllowEmptyStrings = false, ErrorMessage = "Please Inform The Code")]
    [Display(Name = "Code")]
    public string gCode { get; set; }

这是我的,比如我的模型上的Customer类。验证在UI上完美运行。

在第二个项目中,当使用Entity Framework - 数据库时,我的edmx文件包含我的实体,我使用ObjectContext查询数据库,这意味着Customer类是由EF构建的。

我现在应该在哪里添加这些验证?

1 个答案:

答案 0 :(得分:3)

模型首先有这个问题 - 但它可以使用MetaData解决。假设您有一个名为Field的生成实体和要用[Required]属性装饰的值字段,请执行以下操作:

namespace Model.Entities {

    [MetadataType(typeof(FieldMetadata))]
    public partial class Field : EntityBase {

    }

    class FieldMetadata {
        [Required]
        public object Value;
    }
}

在这里,您要将元数据添加到您无法修改的现有类成员的Value成员中。

编辑:如果它不起作用,也可以调用TypeDescriptor。

TypeDescriptor.AddProvider(new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Field), typeof(FieldMetadata)), typeof(Field));