DataAnnotation符合EF T4 POCO时会发生什么?

时间:2012-05-21 16:10:17

标签: asp.net-mvc entity-framework poco t4

我想建议使用EF T4 POCO Generator生成的模型,并利用其中的验证属性,就像MVC项目中的/ Models中的普通模型一样。

背景: 我们正在尝试设计一个Web应用程序,2或3个开发人员将使用它。它是一种scrum风格,我们在构建Web应用程序时定期从客户端获得需求修改。表,列和关系可能会相应改变。

我们的方法: 我们希望使用EF T4 POCO Generation,因为每次将新表和列添加到数据库时,EF T4都可以自动更新POCO模型。我们希望将这些POCO模型用作MVC项目的模型层(在不同的Models.dll中并将其包含在项目中,而不是位于MVC项目的/ Models /文件夹中)。

问题: 我们想要为模型类和属性添加属性。但是,EF T4将覆盖模型类,我们不能(并且不认为我们应该)将这些属性添加到这些模型中。我们不知道什么是正确的方法。

我只能想到在MVC项目中的包装器ViewModels中创建属性。它们包含了EF T4完成的Models.dll中所有必要的模型。然后将属性放在它们前面。但是对我来说,打败DRY原则看起来很难看。你会怎么做?感谢您的想法!

---编辑--- 我找到了一个很酷的技巧here来帮助我的包装理念。但是,我没有提到它,因为我想开放看到不同的建议并进行比较:)

1 个答案:

答案 0 :(得分:2)

使用好友类。您的EF类生成为partials。创建另一个部分类,并使用MetadataType属性对其进行注释。

[MetadataType(typeof(FriendMeta))]
public partial class Friend
{
}

然后,您可以将数据注释属性添加到伙伴类中的同名属性。

public class FriendMeta
{
    [DisplayName("First Name")]
    public string FirstName { get; set; }

    [DisplayName("Last Name")]
    public string LastName { get; set; }

    [DisplayName("Date of Birth")]
    public DateTime BrithDate { get; set; }
}

ASP.NET MVC元数据提供程序将为您选择这些属性。