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中使用过模型.我很难过.
非常感谢,
抢
DbUpdateConcurrencyException 被称为“当预期实体的 SaveChanges 将导致数据库更新但实际上数据库中没有行受到影响时”。来源
我认为 EntityFramework 执行此检查是为了防止多用户场景中的并发问题。
您可以在添加项目后插入另一个zurich.SaveChanges();项目,然后它应该成功删除项目,但正如您所提到的,这并不理想。
也许您应该检查项目集合 - 如果 tagProjectGroupItem 包含在项目中,则不要调用,而是在调用数据库操作之前zurich.TagProjectGroupItems.Add(tagProjectGroupItem);从集合中删除 tagProjectGroupItem 。