0

当我尝试使用实体框架删除行时收到此错误。真的不明白为什么!

无法删除该对象,因为它在 ObjectStateManager 中找不到。

   public void Delete(int ticketID)
            {

                Modules.Entity.gmEntities context = new Modules.Entity.gmEntities();

                var ticketitem = context.xticketitem.Select(p => p.TicketID == ticketID);

                ticketitem.ToList().ForEach(r => context.DeleteObject(r));

                context.SaveChanges();

            }
4

1 回答 1

1

通过您的调用,context.xticketitem.Select(p => p.TicketID == ticketID);您将获得上下文中不存在的布尔值列表。

我认为你应该这样做:

var ticketitem = context.xticketitem.Where(p => p.TicketID == ticketID);
ticketItem.ToList().ForEach(r => context.xticketitem.DeleteObject(r));
context.SaveChanges();

编辑:我已经移到.ToList()下一行,以使我们的片段之间的差异更加明显。让我们尝试一步一步地修改它:

  1. 你打电话时var ticketitem = context.xticketitem.Select(p => p.TicketID == ticketID);

    您正在创建查询,该查询将通过所有 xticketitems 并返回每个项目的 TicketID 是否等于作为参数传递给您的 Delete 方法的 ticketID 变量。此查询的结果是IEnumerable<bool>

    我的代码返回IEnumerable<xticketitem>. 这是主要区别。

  2. 当你调用context.DeleteObject(r)你的r变量是布尔值。并且您正在上下文中调用 DeleteObject 方法。该方法接受类型参数object(这就是您在编译时不会出错的原因)。

    我在xticketitemObjectSet 上调用 DeleteObject,它接受类型的类型参数xticketitem

于 2013-07-15T14:40:54.550 回答