gpt4 book ai didi

c# - EDMX模型不同的代码生成项有什么本质区别?

转载 作者:可可西里 更新时间:2023-11-01 09:05:38 26 4
gpt4 key购买 nike

我正在努力提升 Entity Framework ,这样我就不会觉得自己身处黑暗时代。我尝试(迄今为止失败了)从生成的代码中了解可用代码生成项之间的本质区别。

POCO 似乎将实体数据结构与将它们移入/移出数据存储的对象隔离开来。

我不确定“ self 跟踪实体”是什么。我猜跟踪部分指的是实现所谓的“工作单元”模式,但我不是肯定的。更令人头疼的是,我想我想知道“ self 跟踪而不是什么?”。

enter image description here

最佳答案

POCO 生成器

POCO 代表普通旧 C#(或 CLR)对象。 POCO 独立于 EF。它们只是遵循一些规则的类,但如果你愿意,你可以从你自己的类型继承它们。它们也不包含任何持久性相关数据。

目前这种类型最受欢迎,因为它是当前架构方法的趋势,拥有一切 POCO 和轻量级。在某些情况下,使用 POCO 更为复杂,但这是持久性无知架构的代价。

实体对象生成器

此生成器生成与 EDMX 的默认代码生成方法相同类型的实体。这些实体派生自 EntityObject 类,这使得它们完全依赖于 Entity Framework (我称它们为重实体)。这种依赖性为它们提供了一些额外的功能或简化,但它使它们更难在分离的场景中使用,并且它们的使用导致架构上层与 Entity Framework 紧密耦合,或者在实现更好的分离时导致额外的复杂性。

这种类型的实体是第一个 EF 版本中唯一支持的类型。甚至每个人都在使用 POCO 来实现更好的分离,这种类型是 EF 的原生类型,并且可能提供大多数功能。

此生成器还使您的实体可序列化(使用 DataContractSerializer)。

自跟踪实体 (STE) 生成器

这是一种非常特殊的 POCO 生成器。使用 EF 时,我们会区分两种情况。 EF 跟踪对实体所做更改的附加场景和您在 EF 范围之外进行更改的分离场景,一旦您将实体附加到 EF,您必须告诉它您做了哪些更改。典型的分离场景是将实体传递给客户端的 Web 服务,一旦客户端将它们传回,您必须以某种方式同步更改,以便 EF 知道它必须生成哪些 SQL 命令。 STEs are for these detached scenarios .它们是变更集模式的实现=它们跟踪它们的当前状态以及自开始跟踪以来所做的更改(就像旧的 DataSet 所做的那样)。

这是一个理论。在现实世界中,STE 有一些 big disadvantages并且仅适用于非常特定的场景。

编辑:

还有一个生成器与 Entity Framework 4.1 一起安装。

数据库上下文生成器

这个生成器导致与 POCO 生成器相同的实体。唯一的区别是使用的 API。 POCO 生成器使用 ObjectContext API,而 DbContext 生成器使用带有 DbContext API 的 POCO(仅在 EF 4.1 和 2011 年 6 月 CTP 中可用)。这些 API 之间的区别是 matter of choice .

关于c# - EDMX模型不同的代码生成项有什么本质区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7127383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com