2

我正在使用实体框架。我正在尝试从 linq 获取结果,然后对它们进行删除:

    IEnumerable<tblAVAL> tblval = db.tblVALs.Where(p => p.PgrID == prid);
    db.DeleteObject(tblval);
    db.SaveChanges(); 

注意tblval返回一个集合。我收到以下消息:

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

如果我执行以下操作,它会起作用:

    tblAVAL tblval = db.tblVALs.First(p => p.PgrID == prid);
    db.DeleteObject(tblval);
    db.SaveChanges(); 

如何使用返回多于 1 行的集合删除它?

4

1 回答 1

1

当您将集合传递给 DeleteObject 方法时,它会尝试映射 Collection 对象,因为它是一个实体。您需要做的是迭代集合并删除项目。

foreach( var tblav in db.tblVALs.Where(p => p.PgrID == prid))
    db.DeleteObject(tblav);

db.SaveChanges(); 

EntityFramwork 不支持批量删除、更新和插入。http://magiq.codeplex.com有一个 Linq-to-Sql 和 EntityFramework 的实现,但没有所有功能。也许所做的符合您的需求。

于 2012-06-13T18:15:07.683 回答