我有一个4个层次的Web应用程序在C#... .NET 4.0中编程:

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

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

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

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

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

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

有帮助吗?

解决方案

修改T4模板根本不是很难。我最近遇到了同一问题,决定对T4进行仔细阅读,然后修改模板以按我需要的方式创建生成的属性(注释,在我的情况下使用notifypropertychange等MVC UI和Silverlight UI)。

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

其他提示

如果您的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
    }
}

两个额外的积分 - 元数据类不必嵌套在您定义的部分中,但我认为这是整洁的。另外,这些类型不必在元数据类中匹配,因此,如果您想,您可以将它们全部匹配(并且您可能会在网上看到一些示例)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top