使用MVC3和实体框架。
我试图从数据模型中获得验证
问题:在实体框架保存中,如何自动为我的伙伴类添加[MetadataType标签?
[EdmEntityTypeAttribute(NamespaceName="ModelValidationTestModel", Name="Person")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
[MetadataType(typeof(Person_Validation))] // I want EF to put this line in automatically
public partial class Person : EntityObject
...
[Bind(Exclude="PersonID")]
public class Person_Validation
{
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required]
public int Age { get; set; }
[Required]
public string Email { get; set; }
}
使用示例来自:http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx
答案 0 :(得分:9)
我认为最好的选择是不要搞乱EF生成的类。而是定义自己的部分类:
[MetadataType(typeof(Person_Validation))]
public partial class Person
{
//rest of class may be empty
}
如果您愿意,可以在与Person_Validation类相同的文件中执行此操作。
这不是自动的,但它是安全的(您的更改不会丢失)。这种方法适用于任何代码生成框架(使用部分类),而不仅仅是EF。
答案 1 :(得分:3)
数据注释/属性在编译时被烘焙,您无法动态添加它们。我建议你避免在视图中传递/获取EF模型。您应该使用视图模型,这些视图模型是专门针对给定视图的需求而定制的类。正是这些视图模型将处理将处理视图特定验证,例如required,format,...)。然后,您可以使用AutoMapper让控制器在视图模型和EF模型之间进行映射。