- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经阅读了一些关于可能导致 dbUpdateConcurrencyException
的问题和文章而且它们似乎都与我的代码中发生的事情无关。我对使用 Entity Framework 6.0 的 CRUD 操作进行了简单的功能测试。
我的 [TestInitialize]
插入一些数据,我的 [TestCleanup]
删除相同的数据。除了删除记录的测试外,这适用于我的所有测试。当调用该测试的清理时,它会抛出 dbUpdateConcurrencyException
。 .
我的测试清理方法是这样的:
var contracts = this.Context.Contract
.Where(c => c.EntryUserID == "FunctionalTests.TestData").ToList();
this.Context.Contract.RemoveRange(contracts);
this.Context.SaveChanges();
var customers = this.Context.Customer
.Where(c => c.EntryUserID == "FunctionalTests.TestData").ToList();
this.Context.Customer.RemoveRange(customers);
this.Context.SaveChanges(); //This throws dbUpdateConcurrencyException??
在此失败之前运行的测试从 Context.Contract
中删除了一条记录.一些奇怪的事情:
Context.Contract
工作得很好。这是Context.Customer
的清理这是打破,即使Customer.Contract
是测试期间删除的内容。 Contract
确实有一个指向 CustomerId
的外键.我猜这是相关的;删除契约(Contract)会改变 Customer
实体,自Customer
实体具有契约(Contract)属性的集合。但同样,我在删除契约(Contract)后重新加载客户;因此它们不会在加载和删除之间被修改。
我曾尝试一次删除一个项目而不是使用 RemoveRange()
;第一次删除时发生同样的错误。我试过打电话 Reload()
在特定的 Customer
在尝试删除那个 Customer
之前的实体;同样的结果。
另请注意,这适用于所有其他不删除合约的测试。因此,在删除客户之前删除所有契约(Contract)就可以正常工作。只有在删除清理中的其余契约(Contract)之前删除了单个契约(Contract)。
这是完整的错误消息/堆栈跟踪:
System.Data.Entity.Infrastructure.DbUpdateConcurrencyException: System.Data.Entity.Infrastructure.DbUpdateConcurrencyException: Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=472540 for information on understanding and handling optimistic concurrency exceptions. ---> System.Data.Entity.Core.OptimisticConcurrencyException: Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=472540 for information on understanding and handling optimistic concurrency exceptions.. Result StackTrace:
at System.Data.Entity.Internal.InternalContext.SaveChanges() at System.Data.Entity.Internal.LazyInternalContext.SaveChanges() at System.Data.Entity.DbContext.SaveChanges()
内部异常具有完全相同的类型和消息,具有此堆栈跟踪:
at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.ValidateRowsAffected(Int64 rowsAffected, UpdateCommand source) at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update() at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.b__2(UpdateTranslator ut) at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.Update[T](T noChangesResult, Func
2 updateFunction)
1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) at System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions options, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction) at System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass2a.b__27() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation) at System.Data.Entity.Core.Objects.ObjectContext.SaveChangesInternal(SaveOptions options, Boolean executeInExistingTransaction) at System.Data.Entity.Core.Objects.ObjectContext.SaveChanges(SaveOptions options) at System.Data.Entity.Internal.InternalContext.SaveChanges()
at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.Update()
at System.Data.Entity.Core.Objects.ObjectContext.<SaveChangesToStore>b__35()
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func
更新
我能够通过传递 DbContext
让它工作/解决它我在我的数据设置/拆卸中使用到正在测试的方法。换句话说,错误似乎是因为有一个 DbContext
用于测试设置/拆卸,以及一个不同的 DbContext
用于被测试的代码。
但是,这并没有真正回答我的任何问题。我宁愿不必绕过我的 DbContext
确保它是一样的;有没有一种方法可以让我的上下文从实际数据库中刷新/加载,而不仅仅是使用它所知道的?而且,这根本无法解释为什么删除契约(Contract)可以正常工作,而且它只会在删除客户时失败。
最佳答案
这个错误是因为测试设置运行时正在加载测试设置和拆卸使用的DBContext。不同的上下文会在设置和拆卸之间更改数据库,并且因为第一个上下文是在设置期间加载的,所以它基于数据库的“旧”版本,即测试运行之前的版本。
解决方案是不要让拆卸使用与安装程序使用的相同的 DBContext。 Teardown 应该加载自己的新 DBContext,以便根据最新数据加载它。
我曾假设重要的是从数据库加载要删除的客户时数据的状态。但显然重要的是加载 DBContext 时数据的状态。
关于c# - 加载后简单删除时出现 dbUpdateConcurrencyException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33697855/
我在通过 DbContext.Add(...) 方法添加新实体时遇到问题。在 DbContext.SaveChanges() 上,我得到一个 DbUpdateConcurrencyException。
我有一个表单,用户可以在其中编辑他们的用户帐户信息,然后保存新的更改。 当我将修改后的更改保存到数据库时,我遇到了这个问题。 在 context.SaveChanges() 行中,我抛出了一个 DbU
我已经阅读了一些关于可能导致 dbUpdateConcurrencyException 的问题和文章而且它们似乎都与我的代码中发生的事情无关。我对使用 Entity Framework 6.0 的 C
我在 EF6 应用程序中有以下类。 public class Extension { [Key] [Column(Order = 1)] [DatabaseGenerated(
我正在尝试通过 webapi 后面的 aspnetcore.identity UserManager 删除用户。 [HttpPost("Delete", Name = "DeleteRoute
我有一个应用程序可以将大量数据读入内存并分批处理。 我想要的是 Entity Framework 忽略 DbUpdateConcurrencyException删除已删除的实体时。 原因是当一个实体被
我有一个有效实现缓存的表 - 我们将内容放入,我们将内容取出。它有一个 last_accessed 字段,指示它何时被插入或读取,它有一个 max_age 字段,指示保留记录的时间。 我们想清除旧记录
也许我的搜索查询不是很复杂,但我没能找到我正在寻找的正确答案。 我正在 .NET Core (MVVM) 中开发一个 Web 应用程序,其中包含一些用于 CRUD 操作的形式。我处于学习曲线中,观看了
我有以下代码,我正在尝试使用 ef core 更新 ClientAccount,但它们并发检查失败: public class ClientAccount { [Key
我需要帮助测试以下代码 public virtual void Update(T entity) { if (entity == null) {
我在使用 Entity Framework 和 Code First 时遇到问题。我有一个带有 Timestamp 属性的实体,我向数据库添加了一条新记录,调用 SaveChanges,一切正常。当我
这是我的问题:每次我尝试向数据库中添加一行时,都会出现以下异常: DbUpdateConcurrencyException 除了我,没有其他人使用这个开发数据库。请帮忙。我在我的智慧在这里结束。 这是
我正在工作中构建一个新的 .Net Core 2.2 网站并尝试了几种不同的方法,但是在设置 CRUD 模型后使用编辑功能时我收到错误消息。最初我从数据库优先方法开始,然后在尝试编辑项目时收到 DbU
我刚刚启用了我的一个实体的“并发模式”属性。 当我尝试更新时一切正常。 但是当我尝试删除实体时,我总是得到这个错误: DBUpdateConcurrencyException Store update
我在带有 Web 客户端的 Web API 服务器上使用 EF 6.x(代码优先),我需要实现并发处理。问题是我什至无法让 EF 生成异常。 我发现的大多数示例似乎都没有使用“分离的实体”,在这种情况
我正在使用 DbContext 试验 POCO,但不明白如何触发乐观并发异常。当我在应该并发失败的时候调用 DbContext.SaveChanges() 时,它返回零而不是抛出 DbUpdateCo
我有 3 个相关表 个人实体:具有来自地址实体的两个外键(Address 和 Address1)以及来自所有者表的一个外键 地址实体有一个来自所有者表的外键 人员 View 具有来自地址实体的字段,并
当我尝试保存数据库更改时,我不断收到此错误: > {"Store update, insert, or delete statement affected an unexpected > number
MVC/EF 新手……我的 MVC Web 应用程序是首先使用数据库模型中的代码创建的,因为我已经有了数据库(SQLExpress)…… 当我尝试将记录更新到数据库时出现以下错误: Store upd
在 MVC 3 Entity Framework 项目中,我似乎在追逐自己的尾部,没有得到要更新的简单记录,这让我发疯了。我错过了什么? 我可以很好地创建记录,但似乎无法计算出执行更新的逻辑。我尝试了
我是一名优秀的程序员,十分优秀!