【发布时间】:2013-11-20 21:21:32
【问题描述】:
我在执行本应足够简单的任务时遇到错误。
我首先使用的是 Entity Framework 6 代码。
我正在向我的上下文中添加一个新实体,将其删除,然后执行保存。这会产生一个 DBConcurrency 异常(我是唯一的用户)。
为此,我执行以下操作:
zurich.TagProjectGroupItems.Add(tagProjectGroupItem); zurich.TagProjectGroupItems.RemoveRange(items);
(最初添加的对象是集合的一部分)
int counter = zurich.SaveChanges();
这会产生以下异常:
EntityFramework.dll 中出现“System.Data.Entity.Infrastructure.DbUpdateConcurrencyException”类型的异常,但未在用户代码中处理 附加信息:存储更新、插入或删除语句影响了意外数量的行 (0)。自加载实体后,实体可能已被修改或删除。刷新 ObjectStateManager 条目。
objectcontext 告诉我有 0 个新条目,0 个已更新,1 个要删除。我想它正试图从数据库中删除实体并返回 0 结果,因为该实体尚未被写入。
我做错了什么?!我以前从未使用过代码,并且只在 EF4 中使用过模型。我被难住了。
非常感谢,
罗伯
【问题讨论】:
-
您是说要从集合中删除的项目对象包含您刚刚添加到上下文中的“tagProjectGroupItem”吗?
-
正确的是 Ciaran。用户界面允许用户添加实体并删除/删除它。我可以删除,但显然我得到了相同的结果。
-
但是,如果您要在之后立即删除该项目,为什么还要将该项目添加到上下文中呢?实体的添加和删除不是单独的事件/处理程序吗?
-
用户有一个用户界面,允许他/她在网格中添加、删除和更新条目。当窗口关闭时,将执行保存。因此,用户可能会或可能不会实际执行此操作(添加然后删除),即他们可能会添加一个项目并改变主意并将其删除。每次添加项目时,我都不想进入数据库,因为它看起来非常适合数据库聊天。我以前可以用 EF 4 做到这一点,但现在不行?
标签: c# entity-framework