2011-03-14 85 views
1

使用MVC3和实体框架。实体框架 - DataAnnotations

想获得验证从数据模型流动

问:在实体框架保存,我怎么能自动放入[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

如何生成实体? – 2011-03-14 22:28:13

+0

使用EF模型设计器,然后查看代码生成的文件 – 2011-03-14 23:13:09

回答

3

数据注释/属性在编译时出炉,你不能动态地添加他们。我会建议你避免传递/获取你的EF模型的意见。您应该使用专门针对特定视图需求量身定制的视图模型。这些视图模型将处理视图特定的验证,例如所需的格式,...)。然后,您可以使用AutoMapper将您的控制器映射到视图模型和EF模型之间。

+0

感谢Darin - 我正在寻找一种干净的方式来验证从我的模型流向前端,以便我不会在任何地方重复验证。并保持简单。干杯。 – 2011-03-14 23:12:43

9

我认为最好的选择是不要混淆由EF生成的类。相反,请定义您自己的部分类:

[MetadataType(typeof(Person_Validation))] 
public partial class Person 
{ 
    //rest of class may be empty 
} 

如果您愿意,可以在Person_Validation类的相同文件中执行此操作。

这不是自动的,但它是安全的(您的更改不会丢失)。这种方法适用于任何代码生成框架(使用部分类),而不仅仅是EF。