实体框架 - DataAnnotations

时间:2011-03-14 22:21:05

标签: entity-framework asp.net-mvc-3

使用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

2 个答案:

答案 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模型之间进行映射。