问题标签 [self-tracking-entities]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3881 浏览

entity-framework-4 - EF4:POCO、自我跟踪实体、POCO 代理之间的区别

有人可以指出 POCO、自我跟踪实体、POCO 代理之间的区别吗?

实际上,我正在使用 Entity Framework 4.0 和 POCO(存储库模式),每当我在 POCO 中进行一些更改并调用 ObjectContext.Savechanges 时,它就会反映到数据库中。我的问题是,

  1. 由于未跟踪,上下文如何将更改持久保存到数据库?
  2. 上下文是否为 POCO 动态生成跟踪信息?

我正在使用的示例代码,

0 投票
1 回答
504 浏览

.net - 使用 FK 使用实体框架将数据插入多个表

现在我正在尝试在电影中插入一条新记录,但我不知道导演是否已经存在于数据库中并且与音乐相同)。

从我正在使用的 UI 中all movie information, DirectorName and MusicName

现在,当我保存信息时,我必须先检查是否使用directornamemusicname,然后再检查如何SaveChanges()处理上下文。

让我知道这是如何工作的。

0 投票
1 回答
864 浏览

.net - 自跟踪实体集和加载带有包含问题的实体

我对自我跟踪实体的 .include 方法有疑问。我的名为documents 的表与States、Company、Workers 和Departments 表有关系。我想用这些相关数据加载所有文档。我想这样做:

但这给了我一个例外:

指定的包含路径无效。EntityType“workflowModel.Department”不声明名为“States”的导航属性。

同样的错误也适用于公司。什么是奇怪的工人和部门的作品。我也不为公司和州工作(我使用了内置的复数和单数)。我仔细检查了模型上的名称(实体集名称属性)并复制了名称,但仍然没有用。有人知道发生了什么吗?或者也许是其他方法来加载所有这些数据?提前感谢您的帮助!

0 投票
2 回答
815 浏览

asp.net - 在多个帖子中使用 ASP.NET 中的自我跟踪实体

我有一个简单的要求(所以我想......!)

我有一个由 Order、OrderLine、Product 组成的模型。

我想创建一个订单并添加 OrderLines(每个 OrderLine 都与一个产品相关)。我创建 Order 并向其添加新的 OrderLines。在帖子之间,我将 Order 实体存储在 Session(或 ViewState)中。你知道我已经添加了对二进制序列化的支持,它工作正常。

因此关系是 Order > OrderLine(s) > Product(s)。

您可能已经猜到问题出在哪里 - 当我 SaveChanges() 时,我得到通常的“AcceptChanges 无法继续,因为对象的键值与 ObjectStateManager 中的另一个对象冲突”。错误。

我在网上参考了许多文章,但似乎没有一篇文章处理这种情况(我有两个以上实体的关系),例如http://blogs.msdn.com/b/diego/archive/2010/10/06 /self-tracking-entities-applychanges-and-duplicate-entities.aspx

这肯定是一个很普遍的要求吧?有没有人用实体框架做同样的事情(并且不使用 DTO 等)?

干杯 - 帮助!:)

缺口

0 投票
0 回答
313 浏览

entity-framework-4 - 如何重用自我跟踪实体?

在 STE 的无数问题中,我现在面临这个问题,这应该是微不足道的,但不是:

为简单起见,我们假设一个标准的发票、订单、产品场景。

假设我有一个非无国籍(无论出于何种原因)层,它接收发票并为某些产品添加一些订单,然后再将发票发送回它来自的层。

这听起来很简单,但实际上是我没有找到简单解决方案的 STE 问题。问题是如何保留一组产品实体以分配给订单。正如我所看到的,我必须以其中一种方式来做,所有这些都有主要缺点:

为我要放置在发票实体中的每个订单查询数据库中的产品实体。

缺点:如果在多个订单中使用相同的产品,当发票更改保存在数据库中时,EF 会抛出异常,因为上下文中不允许有多个相同产品密钥的实例。我可以确保在多个订单中出现的产品只查询一次,然后在订单之间共享,但这肯定会使事情复杂化。

如果产品实体(或另一个领域场景中的等效实体)相当大,或者无论出于何种原因在应用程序层查询产品的数据库是不切实际的,则另一个缺点是性能。

在应用程序生命周期开始时查询所有产品实体的数据库

如果产品列表很少更改,则如果您在用户应用程序中保留产品列表,这将是典型的场景。在我的情况下,我不想查询数据库,因为“产品”类型列表在应用程序的生命周期中永远不会改变,性能是一个重要问题,系统应该对数据库暂时不可用很健壮,所以我想要保留“产品”等效实体的缓存集合。

缺点:这里的主要缺点是将缓存的产品分配给新的订单实体会导致内存泄漏。原因是 STE 生成的“Fixup”方法会将事件处理程序连接到产品的 ChangeTracker 以处理产品的级联删除。该事件处理程序将保持新订单和缓存产品的连接,累积在缓存生命周期内添加的所有订单。一种解决方案可能是实现 STE 的某种“冻结”属性,这样不仅会禁用更改跟踪,而且即使在导航属性分配之后,实体和更改跟踪器的状态也将保持不变。这种“冻结”修改可能很难编写,因为 STE 代码带有很多副作用,使它们难以修改。

创建产品实体克隆

在这里,产品在应用程序生命周期开始时被查询,但不是使用产品实体,而是在将产品分配给订单时进行克隆。这将解决内存泄漏问题,但需要实现和维护克隆。重写 STE .tt 脚本以支持克隆可能不会太难。但是,实体上下文中的多个实体共享相同的密钥仍然存在问题。

0 投票
2 回答
228 浏览

entity-framework - 实体框架 - 自我跟踪实体

如果使用带有实体框架的 STE,在构建将通过 wcf 接收实体的客户端应用程序(例如网站)时,是否需要引用模型 dll 程序集(其中包含类的定义?)以实现所有功能STE的?

或者,当您只使用从服务 wsdls' 生成的代理类时,您会失去哪些功能?

0 投票
2 回答
653 浏览

silverlight - EF4 + STE:通过 WCF 服务重新附加?每次都使用新的对象上下文?

我计划将 WCF(不是 ria)与 Entity Framework 4 和 STE(自我跟踪实体)结合使用。如果我正确理解这一点,我的 WCF 应该向客户端(在我的情况下为 Silverlight)返回一个实体或实体集合(例如使用 LIST 而不是 IQueryable)。

然后客户端可以更改实体或更新它。在这一点上我相信它是自我跟踪?这是我有点困惑的地方,因为有很多关于 STE 不跟踪的报告问题。

无论如何,然后要更新,我只需要用另一种方法将实体发送回我的 WCF 服务来进行更新。我应该每次都创建一个新的 OBJECTCONTEXT 吗?在每种方法中?

如果我每次在 WCF 上的每个方法中都创建一个新的对象上下文,那么我不需要将 STE 重新附加到对象上下文吗?

所以基本上单靠这个是行不通的??

或者我应该在 WCF 服务的构造函数中创建一次对象上下文,以便 1 次调用和使用相同 WCF 实例的每个附加调用都使用相同的对象上下文?

我可以在来自客户端的每个方法调用中创建和销毁 WCF 服务 - 因此每次实际上创建一个新的对象上下文。

我知道让对象上下文保持很长时间并不是一个好主意。

0 投票
1 回答
328 浏览

wcf - EF4:使用添加服务引用会导致 STE(自我跟踪实体)出现问题,不记得有变化吗?

我发现了一个问题,但它指的是 VS 2010 的 BETA 版本。我想知道这个问题是否已在 RTM 中得到修复?

基本上它声明(通过EF 4 Self Tracking Entities 看到它没有按预期工作

确保在您的客户端上重用自我跟踪实体模板生成的实体代码。如果您使用由 Visual Studio 或其他工具中的添加服务引用生成的代理代码,大部分情况看起来都是正确的,但您会发现实体实际上并没有跟踪它们在客户端上的更改。

我非常习惯于使用添加服务参考,过去它对我来说总是很有效,但我当然没有使用 STE(自我跟踪实体)。VS 2010 RTM 和 STE 模板是否仍然存在此问题?

如果我确实通过代码而不是添加服务创建代理,那么所有类都不会被创建,不是吗?

任何帮助或见解真的很感激

0 投票
1 回答
90 浏览

entity-framework-4 - 有什么方法可以知道 EF4 当前是否正在为自我跟踪实体 (STE) 补水

我需要在我的 EF 4 STE 公共 getter 和 setter 中执行一些自定义逻辑。但是,我只希望在 EF 当前未对实体进行水合时执行此自定义逻辑。

是否有任何内置标志、状态或对象状态可以检查以确定 EF 当前是否代表我在为 STE 实体进行水合?

我没有进行延迟加载,因此我们一次性执行所有数据加载。我希望我不必更改 Entity T4 模板来添加基础设施来自己跟踪这些东西。

谢谢,内特

0 投票
1 回答
538 浏览

c# - 自我跟踪实体集和比较更改

我将 .net 应用程序作为我大学的一个项目,但我遇到了自跟踪实体集的问题。我正在选择一条记录,将其通过 wcf 服务传递,进行一些更改并再次将其传递给服务器。在那里我想比较更改的内容,所以我再次从上下文中选择相同的记录(这是具有旧值的记录)并进行比较。然后,在比较我想在上下文中调用 ApplyChanges 与通过服务传递的实体之后,我得到一个错误:

AcceptChanges 无法继续,因为对象的键值与 ObjectStateManager 中的另一个对象冲突。在调用 AcceptChanges 之前确保键值是唯一的。

我想这是因为两次加载相同的实体(更改之前和更改之后进行比较)。有没有更好的方法来比较更改(我需要在另一个数据库表中创建更改历史记录)?如果两个客户端获得相同的记录,并且第一个客户端更改它并想要存储到数据库中,这个错误是否也会出现?我使用.net 4.0。