EssaieFilament是我数据库中表格的名称。
注意:我从法语中翻译了错误消息,因此可能不完全正确。
您好,我填写了一个" EssaieFilament"的列表,然后将列表发送到一个删除它们的函数,但随着上下文的变化,它会给我一个错误。
L'异常System.InvalidOperationException发生了 HResult = 0x80131509消息=无法删除对象,因为它不可能 在ObjectStateManager中找到。源=的EntityFramework
有没有办法解决这个问题而不必实际发送上下文?
public static void SupprimerEssaieFilament(List<EssaieFilament> essaieFilament_list)
{
using (var context = new tp2_1608469Entities1())
{
foreach (EssaieFilament essaieFilament in essaieFilament_list)
{
context.EssaieFilaments.Remove(essaieFilament);
context.SaveChanges();
}
}
}
答案 0 :(得分:0)
它不会像这样工作。您正在打开一个新的上下文(与DataBase的连接),但您检索的实体属于另一个连接(第一个方法中的那个,您查询过它们)。
您应该将上下文发送到方法,或者发送Id的列表,当您打开新上下文时,检索实体,然后删除(或者您想要做的任何事情)它们。
答案 1 :(得分:0)
在这种情况下,您可以使用.AttachTo执行某些操作,您可以将实体列表附加到新上下文中,然后将其删除。
您还可以重新查询新上下文并删除找到的项目。这将比您示例中的代码执行得更好,因为您在一次调用中一次删除所有项目,而不是在集合中每次删除一次。
public static void SupprimerEssaieFilament(List<EssaieFilament> essaieFilament_list)
{
using (var context = new tp2_1608469Entities1())
{
var itemIds = essaieFilament_list.Select(x=>x.Id);
var itemsToDelete = context.EssaieFilaments.Where(x=>itemsIds.Contains(x.Id));
context.EssaieFilaments.RemoveRange(itemsToDelete);
context.SaveChanges();
}
}
答案 2 :(得分:-1)
如果上下文发生变化,您必须在删除之前检查上下文中要删除的 .ui-sortable-placeholder {
display:inline-block;
height: 1px;
}
对象是否存在 ...所以试试这个:
essaieFilament