【发布时间】:2011-12-05 05:22:36
【问题描述】:
我正在针对旧数据库评估项目的实体框架。 该数据库设计得相当好,并且已经决定我们将使用 Database-First 方法。 该应用程序将基于 WinForms,但我想提前计划并将 ASP.Net 考虑在内,并且管理层可能会在某些时候要求它,我想重用 DAL。
现在,我了解到 Entity Framework 提供了几种生成实体对象的方法:
- 从 EntityObject 派生的对象
- POCO(对象上下文)
- POCO(数据库上下文)
- 自我跟踪实体 (STE)
我一直在尝试比较这三种方法,到目前为止我发现了这一点。
EntityObject T4 模板是其中最丰富的。 例如,它将实体模型中的 cmets 放入实体的每个类和每个属性之上的 XMLDoc cmets 中,这在代码可维护性方面是相当不错和有用的。 其他生成器均不支持此功能(尽管我知道可以修改 T4 模板,但显然需要一些工作)。 另一方面,DbContext API 更好一些。
EntityObject 派生类型提供了一个事件,您可以在实体的属性更改时挂钩该事件,这对于实现业务逻辑很有用。
我知道 POCO 对此更自然,但每次模型更改时,T4 生成器都会覆盖我的所有更改。 当然,生成的 POCO 是部分类,但据我所知,无法覆盖已在部分类中定义的属性,所以我不确定如何在其中实现业务逻辑?
很多人似乎讨厌 EntityObject 派生类,更喜欢 POCO 方法,但似乎我失去了很多 EntityObjects 提供的现成可用功能,通过POCO路线。 考虑到对 POCO 对象的普遍强烈偏好,我可能会误解一些东西,因此我的问题。
最后,哪个生成器最适合 ASP.Net 环境?我担心我的实体更改停止被跟踪?在这种情况下,自我跟踪实体是否更有用,还是它们仅对网络服务有价值(我可能不会使用)?
非常感谢。
【问题讨论】:
标签: entity-framework