问题标签 [objectstatemanager]

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 投票
4 回答
20835 浏览

entity-framework - 无法附加分离的实体:“ObjectStateManager 中已存在具有相同键的对象”

我正在尝试将实体附加到 ObjectContext。当我这样做时,会引发以下 InvalidOperationException:

我检查了对象状态管理器并且该项目不存在:

或者看看这个抽象的例子,告诉我它是否有意义:

VB中的答案也受到欢迎。

0 投票
1 回答
1672 浏览

entity-framework - 使用“包含”查询时,EF 是否检查对象状态管理器中是否已存在对象?

我应该避免在查询中使用 Include,还是可以依赖 EDM,它在创建查询时会从 OSM 中已存在的查询项中排除?

0 投票
4 回答
29003 浏览

entity-framework - ObjectContext.Refresh()?

如何更新数据存储中的所有脏实体,并将其更改的值重置为原始存储值?

ObjectContext.Refresh方法需要将要刷新的实体作为参数。

0 投票
1 回答
675 浏览

asp.net-mvc - 在页面离开时强制删除 ObjectStateManager 条目

我有一个基于巨人肩膀的编辑 RESTful 向导 | 一个使用 ASP.Net MVC 的 RESTful 向导……也许吧?. 该向导有一个 CANCEL 按钮,按下该按钮会触发下面的代码。

现在,为了能够在取消按钮后调用SaveChanges(),我必须从我的 ObjectStateManager 中手动删除向导中的条目。但是,当您通过手动返回主页取消向导时,它会停留在下一次调用 _entities.SaveChanges() 将抛出一个异常,它无法将对象从向导进度保存到数据库,因为它仍然在对象状态。

请注意,在向导的步骤之间,我没有将任何内容保存到数据库中。我将它保持在会话状态,每一步都检索它:

然而,不知何故,inProgressVacancyWizard.Vacancy 确实出现在 ObjectStateManager 中,所以我必须将其删除,否则在为另一个对象调用 _entities.SaveChanges()时,我会收到关于不完整Vacancy模型的错误。

有没有办法解决这个问题?

//edit 经过一番阅读,我发现我的存储库的基础并不好。如发现here。目前我怀疑是否实现同一篇文章中“每个业务事务一个 ObjectContext 实例”中提到的选项。那会是明智之举吗?我想听听更多关于它的信息,因为它将是一个重大的重构。

0 投票
1 回答
1311 浏览

c# - 实体框架 4(纯 POCO)上的更新操作问题

我有一个用纯 POCO 实现的 Entity Framework 4.0 模型(没有代码生成,没有自跟踪实体,只是普通的旧 CLR 对象)。

现在,这是我在 UI 中执行更新的一些代码:

本质上,我有一个接受强类型 Person 对象的操作方法,我需要更新这个实体。

不会出错,但也不会将更改持久化到数据库中。:(

当我在工作单元的“提交”期间检查EntityState时:

我看到我的实体,带有EntityState.Unchanged

所以这就解释了为什么它没有被持久化。我的查找、添加、删除操作工作正常(正确保留)。但 UPDATE 似乎不起作用。

我发现一些线程说我需要手动设置对象状态:

那是对的吗?我会把这个逻辑放在哪里?公开为我的工作单元上的操作?

显然问题是我没有更改跟踪,因为使用了 Pure POCO(没有 EntityObject 派生,没有 INotifyPropertyChanging 实现)。

但是直到现在我还没有发现它的问题。

我究竟做错了什么?

0 投票
1 回答
1871 浏览

asp.net - EntityDataSource Null 更新参数未标记为已修改

我在 VB.NET 应用程序上使用带有 FormView 的 EntityDataSource。FormView 包含一个带有多个选项卡的 AjaxControlToolKit TabContains。由于每个选项卡都是一个命名容器,因此 Bind 无法正常更新值(从阅读 stackoverflow 上的其他帖子中发现)。相反,我必须在我的 EntityDataSource 上声明 UpdateParameters。示例标记如下:

这很好用,直到编辑客户并将其名称设置为空(假设在这种情况下,允许使用空名称)。Name UpdateParameter 设置为 Null,但 ObjectStateEntry 未设置为针对 Null 属性进行修改,即使之前实体具有指定的值。只要将名称更改为 Null 以外的名称,所有内容都会正确更新。

我通过将以下代码放入 EntityDataSource 的更新事件中找到了一种解决方法。

这可确保 UpdateParameters 中的每个属性都将其状态设置为已修改。它有效,但它看起来像一个黑客,我可以看到它会导致问题。还有什么我可以做的吗?

0 投票
3 回答
20751 浏览

entity-framework - 如何在 EF 4.1 中遍历我的 dbcontext 实体?

我正在使用 ASP.NET 实体框架 4.1 MVC 3 (C#)

我想遍历我的 DbContext 中的所有实体。我需要能够动态引用我的实体才能制作动态视图。

我读过 Lerman 的书、两本 MVC(2 和 3)书、msdn、asp.net 等。也许我只是遗漏了一些东西?

似乎您可能必须使用 ObjectContext 才能访问实体。如果这是正确的方法,我肯定不知道该怎么做。请帮忙。谢谢你。

0 投票
1 回答
2658 浏览

ef-code-first - 实体框架代码优先 DBContext ObjectStateManager 错误

我收到一个错误“ An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.

我知道当我调用 CheckIfNameChanged(TestObject testObject) 方法时,我向 ObjectContext 添加了一个实体键,当我调用 _unitOfWork.TestObjectRepository.Update(testObject) 时附加或编辑代码:

这是发生冲突的地方,我在 ObjectStateManager 中有两个相同的实体键。有没有办法解决这个问题,而无需我去上下文分离实体,或者有其他方法吗?将实体与上下文分离的最佳方法是什么?

0 投票
1 回答
2339 浏览

entity-framework - MVC3:存储库更新和 ObjectStateManager

我的存储库中有一个Update方法,用于更新项目中的文章。我最初使用这种方法只是为了对文章进行管理员编辑。它可以正确处理,但我决定添加一个简单的机制来计算“阅读次数最多”的文章。为此,我想在TimesRead每次查看文章时更新属性。这给我带来了似乎围绕使用ObjectStateManager.ChangeObjectState. 这是我的Update方法:

在我AdminController的以下方法中正确更新:

但是,在这种TimesRead情况下,更新将触发以下异常:

无法附加该对象,因为它已经在对象上下文中。一个对象只有在它处于未更改状态时才能重新附加。

该控制器方法的相关代码:

在环顾四周,看看我能做些什么来解决这个问题后,我发现了这个SO question 的答案。Update所以我通过用建议的代码替换我的方法来实现这个答案。这在我的管理场景中也可以正常工作,但在场景中却不行TimesRead。抛出以下异常:

ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。

例外的含义很清楚,但它确实让我想知道我应该如何处理这些简单的更新。我发现我可以“愚弄” EF 认为模型通过设置没有改变,EntityState.Unchanged并且会更新TimesRead,但会为管理员更新提供例外,说明ObjectStateManager不包含对对象的引用。

我也很清楚这些场景有何不同。该Edit操作是将 ViewModel 中的属性映射到一个新的、未附加的Article对象上,而ArticleController处理直接从上下文中检索的对象。这让我觉得我应该重构这些控制器方法之一,以便更新所采取的步骤是相同的​​。我只是不确定我应该如何处理,因为这两种方法似乎应该能够对我共存。所以我的问题是,我可以改变什么来让两种类型的更新都能正常工作?

感谢您的宝贵时间,对于发布的大量代码,我感到非常抱歉。我只是觉得这一切都与问题有关。

0 投票
1 回答
2544 浏览

entity-framework - ObjectStateManager 和分离的实体状态

我正在使用实体框架,它的某些部分功能对我来说仍然不清楚。比较难理解的主要有:

  • SubmitChanges过程;
  • 调用更新-删除-插入方法的顺序;
  • 对此事的认知ObjectStateManager
  • 分离EntityState,它是提交过程的一部分;

提供您的解释或提供一些有用的链接。