3

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

  • 界面层
  • 业务层
  • 数据访问层
  • 实体层

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

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

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

我想知道的是,是否有一种简单的方法可以在 MVC 模型(在 UI 层)中使用某些 POCO 对象,而无需几乎重写类......并且也无需修改生成这些 POCO 类的 t4(因为我在 t4 上跟不上速度)。

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

4

2 回答 2

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
    }
}

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

于 2010-06-04T19:52:38.363 回答
4

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

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

于 2010-06-04T19:48:34.667 回答