我有一个用C#编写的4层Web应用程序...... .Net 4.0:
我的数据层包含一个edmx 我的实体图层包含我的POCO对象(由t4脚本生成),并且该图层在所有其他图层中引用。
创建MVC表单以创建新客户时,例如......我已经在我的实体层中拥有了包含名字,姓氏等字段的客户类,但该自动生成的POCO类没有有数据注释用于验证... IE表格提交时[必填]等
我现在的解决方案是创建与我的poco类几乎相同的新模型类,但也有这些额外的验证注释。
我想知道的是,如果在MVC模型中(在UI层中)使用某些POCO对象是一种简单的方法,而不必几乎重写该类......并且还没有修改生成这些POCO类的t4 (因为我不能在t4上加速)。
我在stackoverflow http://automapper.codeplex.com/上的另一篇文章中看到了这一点......不确定这是否会成功或是最佳解决方案。
答案 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的解决方案,我希望这很有用。