Entity framework 对实体框架4.1的生成器感到困惑

Entity framework 对实体框架4.1的生成器感到困惑,entity-framework,Entity Framework,我正在根据遗留数据库评估项目的实体框架。 数据库设计得相当好,我们已经决定使用数据库优先的方法。 该应用程序将基于WinForms,但我希望提前计划并考虑ASP.Net,以及管理层可能在某个时候要求它,我希望重用DAL 现在,我了解到实体框架提供了几种生成实体对象的方法: 从EntityObject派生的对象 POCO(对象上下文) POCO(数据库上下文) 自跟踪实体(STE) 我一直在尝试比较这三种方法,到目前为止我已经发现了这一点 EntityObject T4模板是其中最丰富的模板。

我正在根据遗留数据库评估项目的实体框架。 数据库设计得相当好,我们已经决定使用数据库优先的方法。 该应用程序将基于WinForms,但我希望提前计划并考虑ASP.Net,以及管理层可能在某个时候要求它,我希望重用DAL

现在,我了解到实体框架提供了几种生成实体对象的方法:

  • 从EntityObject派生的对象
  • POCO(对象上下文)
  • POCO(数据库上下文)
  • 自跟踪实体(STE)
我一直在尝试比较这三种方法,到目前为止我已经发现了这一点

EntityObject T4模板是其中最丰富的模板。 例如,它将实体模型中的注释放在实体的每个类和每个属性之上的XMLDoc注释中,这在代码可维护性方面是非常好和有用的。 其他生成器都不支持这种开箱即用的方式(虽然我知道可以修改T4模板,但显然需要一些工作)。 另一方面,DbContext API稍微好一些

EntityObject派生类型提供了一个事件,当实体的属性发生更改时,您可以将其挂钩,这对于实现业务逻辑非常有用

我知道POCO对此更为自然,但T4生成器将在每次模型更改时覆盖我的所有更改。 当然,生成的POCO是分部类,但据我所知,不可能覆盖分部类中已定义的属性,因此我不确定如何在其中实现业务逻辑

许多人似乎不喜欢EntityObject派生类,更喜欢POCO方法,但我似乎正在失去EntityObjects提供的许多有用特性,这些特性是通过POCO路线现成的。 考虑到对POCO对象的普遍强烈偏好,我可能误解了某些东西,因此提出了我的问题

最后,哪种生成器最适合ASP.Net环境?我担心我的实体变化会停止被跟踪?在这种情况下,自跟踪实体更有用吗?还是它们只对web服务有价值(我可能不会使用)


非常感谢。

如果您想使用EF 4.1,您的选项只有DbContext生成器。所有其他生成器(POCO、EntityObject和STE)都适用于ObejctContext API(EF 4.0)。我描述了发电机之间的区别

在您的情况下,EntityObject generator可以用于WinForms,但对于ASP.NET解决方案来说,它会很麻烦,因为ASP.NET应用程序是分离的,所以POCO更好—无论如何,您都必须在ASP.NET中处理更改跟踪

STE的用途已经描述,但它们在WinForm中不是很有用,在WinForm中,您可以直接使用附加的实体,或者在ASP.NET中,它们可以在视图状态的请求之间进行连接


您想要直接放入实体的任何业务逻辑都必须在T4 generator中进行编码,否则它将在每次生成后被覆盖。您提到的基于
EntityObject
的生成器的每个功能也可以在POCO/DbContext生成器中实现。

谢谢。那很有帮助。“任何您想直接放入实体的业务逻辑都必须在T4生成器中编码”,您的意思是我需要修改T4模板,使其生成类似于EntityObjects的[Property]更改的事件吗?我曾经对T4做过一些改变,但我不能说这是一次有趣的经历。考虑到这一点,我很惊讶没有看到更多的EF T4脚本共享,而只有MS脚本。此外,我担心这些事件可能不会在ASP.Net环境中引发,是吗(当数据发布回服务器时)?“任何要直接放入实体的业务逻辑都必须在T4 generator中进行编码,否则在每次生成后都会被覆盖”@Bobson:你读过问题了吗?我们正在讨论生成属性中的附加逻辑。仍然存在部分类甚至部分方法没有帮助的情况。我有,但我错过了关于重写它创建的属性的部分。我道歉。