【问题标题】:Confused about generators for Entity Framework 4.1对 Entity Framework 4.1 的生成器感到困惑
【发布时间】: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


    【解决方案1】:

    如果您想使用 EF 4.1,您的选择只有 DbContext Generator。所有其他生成器(POCO、EntityObject 和 STE)都用于 ObejctContext API (EF 4.0)。我描述了生成器 here 之间的差异。

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

    STE 的用途在here 中进行了描述,但它们在 WinForm 中不是很有用,您可以直接使用附加实体或在 ASP.NET 中 demands to store them 在视图状态的请求之间使用。

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

    【讨论】:

    • 谢谢。这很有帮助。 “任何你想直接放入实体的业务逻辑都必须在 T4 生成器中编码”,你的意思是我需要修改 T4 模板以便它生成类似于实体对象的 On[Property]Changed 的​​事件吗?我曾经对 T4 进行过一些更改,我不能说这是一次有趣的体验。考虑到这一点,我很惊讶没有看到更多共享的 EF T4 脚本,而只有 MS 脚本。另外,我担心这些事件可能不会在 ASP.Net 环境中引发,它们会(当数据回发到服务器时)?
    • “任何你想直接放入实体的业务逻辑都必须在T4生成器中编码,否则每次生成后都会被覆盖”单独的 部分类文件中,它将被保留而没有任何问题。上面所有的生成器都已经生成了部分类。
    • @Bobson:你读过这个问题吗?我们正在讨论生成的属性中的其他逻辑。仍然存在部分类甚至部分方法无济于事的情况。
    • 我有,但我错过了关于覆盖它创建的属性的部分。我很抱歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 2019-09-13
    • 2012-07-22
    • 2013-05-13
    • 2020-04-16
    • 2023-03-08
    相关资源
    最近更新 更多