2011-03-14 88 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。