使用EF POCO类作为MVC 2模型(带数据注释)

Chr*_*eis 3 validation asp.net-mvc poco n-layer data-annotations

我有一个用C#... .Net 4.0编写的4层Web应用程序:

  • UI层
  • 业务层
  • 数据访问层
  • 实体层

我的数据层包含一个edmx我的实体层包含我的POCO对象(由t4脚本生成),并且该层在所有其他层中引用.

例如,在创建MVC表单以创建新客户时....我已经在我的实体层中拥有了包含名字,姓氏等字段的客户类,但该自动生成的POCO类没有数据注释用于验证...提交表单时的IE [必需]等

我现在的解决方案是创建新的模型类,它与我的poco类几乎相同,但也有这些额外的验证注释.

我想知道的是,在MVC模型中(在UI层中)使用某些POCO对象是一种简单的方法,而不必几乎重写类...而且还没有修改生成这些POCO类的t4(因为我在t4上没有达到速度.

我在stackoverflow http://automapper.codeplex.com/上的另一篇文章中看到了这个...不确定这是否会这样做或者是最好的解决方案.

Jon*_*Jon 6

如果您的POCO类声明如此:

public class Person {
    public string FirstName { get; set; }
    public string LastName  { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后,如果您只是更改T4以使其成为部分类,则可以在单独的文件中定义:

[MetadataType(typeof(PersonMetadata))]
public partial class Person {

    internal class PersonMetadata {

        [Required]
        // insert other metadata here
        public string FirstName { get; set; }

        // and if you don't want metadata for lastname, you can leave it out
    }
}
Run Code Online (Sandbox Code Playgroud)

两个额外的点 - 元数据类不必嵌套在你定义的部分中,我认为它更整洁.此外,类型不必在元数据类中匹配,因此如果您愿意,可以将它们全部对象(并且您可能会在Web上看到一些像这样的示例)