EF Core刪除未在事務中刪除的項目

c# entity-framework entity-framework-core sqlite uwp

這是我的問題

using (var db = new CassaContext()) {        
      var DbSet = db.GetByName(item.Name);
      DbSet.RemoveRange(DbSet);

      for (var i = 0; i < data.Count; i++)
      {
           JObject jitem = data[i] as JObject;
           var dbobj = vm.Db.JsonToObject(jitem);             
           DbSet.Add(dbobj);
       }

       db.SaveChanges();
}

如果我將在RemoveRange()構造之後添加db.SaveChanges(),一切都很好,但是,沒有它,我有錯誤

無法跟踪實體類型“用戶”的實例,因為已經跟踪了具有相同密鑰的此類型的另一個實例。添加新實體時,對於大多數鍵類型,如果未設置任何鍵,則將創建唯一的臨時鍵值(即,如果為鍵屬性指定了其類型的默認值)。如果要為新實體顯式設置鍵值,請確保它們不會與現有實體或為其他新實體生成的臨時值發生衝突。附加現有實體時,請確保只有一個具有給定鍵值的實體實例附加到上下文。

我想避免在刪除範圍後保存,因為如果事務失敗,我將不會有空表。

我怎麼解決這個問題?提前致謝!如果您需要更多請問!

熱門答案

不確定此錯誤,但您可以嘗試使用顯式事務:

using (var db = new CassaContext())
using (var transaction = db.Database.BeginTransaction())
{
    var DbSet = db.GetByName(item.Name);
    DbSet.RemoveRange(DbSet);
    db.SaveChanges();

    for (var i = 0; i < data.Count; i++)
    {
        JObject jitem = data[i] as JObject;
        var dbobj = vm.Db.JsonToObject(jitem);             
        DbSet.Add(dbobj);
    }
    db.SaveChanges();

    transaction.Commit();
}


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow