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

时间:2010-06-04 19:41:52

标签: asp.net-mvc validation poco data-annotations n-layer

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

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

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

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

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

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

我在stackoverflow http://automapper.codeplex.com/上的另一篇文章中看到了这一点......不确定这是否会成功或是最佳解决方案。

2 个答案:

答案 0 :(得分:6)

如果您的POCO类声明如此:

public class Person {
    public string FirstName { get; set; }
    public string LastName  { get; set; }
}

然后如果您只是更改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
    }
}

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

答案 1 :(得分:4)

修改T4模板并不是很难。我最近遇到了同样的问题,并决定稍微阅读T4,然后修改模板以我需要的方式创建生成的属性(注释,在我的情况下使用NotifyPropertyChange等,因为我使用相同的POCO对象MVC UI和Silverlight UI中。)

即使您正在寻找不需要修改T4的解决方案,我希望这很有用。