簡體   English   中英

EF-無法刪除對象

[英]EF - Can not delete an object

為什么此代碼不起作用? 它插入一個對象但不刪除它

public int Toggle(RequestArchive RequestArchiveObj)
{
   var ra = DataContext.RequestArchives.Where(rec => rec.UserId == RequestArchiveObj.UserId && rec.RequestId == RequestArchiveObj.RequestId);

   if(ra.Count() > 0)
   {
        foreach (var item in ra)
        {                    
            DataContext.DeleteObject(item);
        }
   }
   else
   {
        DataContext.AddToRequestArchives(RequestArchiveObj);
   }

   DataContext.SaveChanges();
   return RequestArchiveObj.Id;
}

您的代碼存在潛在的危險問題,您的問題可能與此有關:

如果不執行查詢對象( DataContext.RequestArchives.Where()返回的對象)而循環執行,則循環中的每個項目都將往返數據庫。 這稱為N + 1選擇問題

您可以使用ToList()方法減輕這種情況:

var ra = DataContext.RequestArchives
                    .Where(rec => 
                           rec.UserId == RequestArchiveObj.UserId && 
                           rec.RequestId == RequestArchiveObj.RequestId)
                    .ToList(); // this executes the query
// ...
foreach (var item in ra) // without ToList() this will query every item by itself
{                    
    DataContext.DeleteObject(item); // and this might collide with the query
}

我對此不太確定,但是可能會出現刪除問題,因為您嘗試刪除對象,同時仍然通過foreach循環查詢對象。 在這種情況下,按照上面的建議使用ToList() ,它應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM