使用Entity Framework 6的DBConcurrency异常

Rob*_*b C 6 c# entity-framework

我正在执行一个应该是一个足够简单的任务的错误.

我首先使用Entity Framework 6代码.

我在我的上下文中添加了一个新实体,删除它然后执行保存.这会产生DBConcurrency异常(我是唯一的用户).

为此,我执行以下操作:

zurich.TagProjectGroupItems.Add(tagProjectGroupItem); zurich.TagProjectGroupItems.RemoveRange(项目);

(最初添加的对象是集合的一部分)

int counter = zurich.SaveChanges();

这会生成以下异常:

EntityFramework.dll中出现"System.Data.Entity.Infrastructure.DbUpdateConcurrencyException"类型的异常但未在用户代码中处理附加信息:存储更新,插入或删除语句影响了意外的行数(0).自实体加载后,实体可能已被修改或删除.刷新ObjectStateManager条目.

objectcontext告诉我,我有0个新条目,0个已更新,1个要删除.我想它会尝试从数据库中删除实体并返回0结果,因为实体尚未写入.

我做错了什么?!我以前从未使用过代码,只在EF4中使用过模型.我很难过.

非常感谢,

抢

Cia*_*her 0

DbUpdateConcurrencyException 被称为“当预期实体的 SaveChanges 将导致数据库更新但实际上数据库中没有行受到影响时”。来源

我认为 EntityFramework 执行此检查是为了防止多用户场景中的并发问题。

您可以在添加项目后插入另一个zurich.SaveChanges();项目,然后它应该成功删除项目,但正如您所提到的,这并不理想。

也许您应该检查项目集合 - 如果 tagProjectGroupItem 包含在项目中,则不要调用,而是在调用数据库操作之前zurich.TagProjectGroupItems.Add(tagProjectGroupItem);从集合中删除 tagProjectGroupItem 。