pocos上的文本模板(作为EF 4.x Generator)和验证属性?

时间:2012-04-12 15:36:32

标签: asp.net-mvc-3 entity-framework-4.1 t4

我们是否同意在自动生成的POCO实体(如使用EF 4.x Dbcontext Generator模板)之上添加验证属性是没有意义的?

因为每次运行工具时都会删除属性。

我的问题是:有没有办法一方面维护自动生成的pocos实体,另一方面维护验证属性?

似乎可以使用代码优先方法吗?

实际上我用数据库第一种方法开始我的项目并自动生成我的POCO。是否有可能摆脱.tt文件,保留生成的pocos并使用代码第一种方法来管理新字段,验证属性(等等......)? POCO上的更改是否会更新我的数据库表?

非常感谢您的灯光。

2 个答案:

答案 0 :(得分:1)

如果你真的在做“代码优先”的方法,那就意味着“代码就是老板”。您不应该反复运行代码生成器来更新代码 - 您应该自己直接更新POCO。

当然,在项目开始时从数据库生成代码生成POCO可能有意义,节省了大量工作。但是不打算继续这样做 - 你会遇到你提到的问题。

如果你想做一个“数据库优先”方法,在数据库中进行更改,你的POCO将是次要的东西,重新生成 - 有点混淆谁是“老板”。

所以我认为(正如你所说)“保持生成的pocos并使用代码第一种方法来管理新字段,验证属性(等等......)”是有意义的。

关于“POCO上的更改是否会更新我的数据库表?” - 它不应该,除非你有一些设置来重新生成数据库。

注意:我来自NHibernate背景,而不是EF,但适用相同的概念。

答案 1 :(得分:1)

这里有几个问题。首先,您要尝试在数据模型类上放置验证属性。这意味着您将数据对象直接传递给视图。虽然这有效,但这不是推荐的方法。

您应该让视图模型只包含任何给定视图所需的信息,并且这些视图模型具有您的验证属性。然后,在业务逻辑中,将视图模型映射到数据模型。

但是,如果您受到约束并决定在视图中使用数据模型,那么您将使用所谓的“伙伴类”将验证器添加到元数据类中。

http://hartzer.wordpress.com/2010/01/26/mvc-buddy-class/

最后,如果您想首先使用Code,您会发现Code First的工作方式与数据库优先级完​​全不同。虽然您可以获取生成的实体然后将它们映射到Code First映射,但使用Entity Framework Power Tools CTP1将数据库反向工程到代码优先模型要容易得多,因为这也会创建映射。