当我尝试使用实体框架删除行时,我收到此错误。真的不明白为什么!
无法删除该对象,因为在该对象中找不到该对象 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();
}
答案 0 :(得分: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()
在下一行,以使我们的代码段之间的差异更明显。让我们一步一步地修改它:
致电var ticketitem = context.xticketitem.Select(p => p.TicketID == ticketID);
您正在创建将由所有xticketitems进行的查询,并返回每个项目的TicketID是否等于作为Delete方法的参数传递的ticketID变量。
此查询的结果为IEnumerable<bool>
。
我的代码返回IEnumerable<xticketitem>
。它的主要区别在于。
当您致电context.DeleteObject(r)
时,您的r
变量是bool。并且您在上下文中调用DeleteObject方法。该mathod接受object
类型的参数(这就是为什么你在编译时没有得到错误)。
我在xticketitem
ObjectSet上调用DeleteObject,它接受xticketitem
类型的strogly类型参数。