C# EF Core Removate未在事务上删除的项目

C# EF Core Removate未在事务上删除的项目,c#,entity-framework,sqlite,uwp,entity-framework-core,C#,Entity Framework,Sqlite,Uwp,Entity Framework Core,这是我的问题 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

这是我的问题

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();
}
使用(var db=new CassaContext()){
var DbSet=db.GetByName(item.Name);
DbSet.removange(DbSet);
对于(var i=0;i
如果我在RemoveRange()指令之后添加db.SaveChanges(),一切都很好,但是如果不这样做,我就会出错

无法跟踪实体类型“Users”的实例,因为 具有相同密钥的此类型的另一个实例已在创建中 跟踪。在添加新实体时,对于大多数键类型,一个唯一的 如果未设置任何键(即,如果 属性被指定为其类型的默认值)。如果你是 显式设置新实体的键值,确保它们不会 与现有实体或为其他实体生成的临时值冲突 新实体。附着现有实体时,请确保只有一个实体 具有给定键值的实体实例附加到上下文

我希望避免在removerange之后保存,因为如果事务失败,我将不会有空表

我怎样才能解决这个问题?提前谢谢!
如果你还需要更多,就问吧

不确定此错误,但您可以尝试使用显式事务:

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();
}
使用(var db=new CassaContext())
使用(var transaction=db.Database.BeginTransaction())
{
var DbSet=db.GetByName(item.Name);
DbSet.removange(DbSet);
db.SaveChanges();
对于(var i=0;i
不确定此错误,但您可以尝试使用显式事务:

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();
}
使用(var db=new CassaContext())
使用(var transaction=db.Database.BeginTransaction())
{
var DbSet=db.GetByName(item.Name);
DbSet.removange(DbSet);
db.SaveChanges();
对于(var i=0;i
这是您的问题,在Entityframework中,您必须在每次执行数据库后编写保存更改。因此,您的函数应该如下所示

using (var db = new CassaContext()) {        
  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();
   }

   db.SaveChanges();
使用(var db=new CassaContext()){
var DbSet=db.GetByName(item.Name);
DbSet.removange(DbSet);
db.SaveChanges();
对于(var i=0;i

}这是您的问题,在Entityframework中,您必须在每次执行数据库后编写保存更改。因此,您的函数应该如下所示

using (var db = new CassaContext()) {        
  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();
   }

   db.SaveChanges();
使用(var db=new CassaContext()){
var DbSet=db.GetByName(item.Name);
DbSet.removange(DbSet);
db.SaveChanges();
对于(var i=0;i

}

例外情况非常明显:已经在跟踪另一个具有相同密钥的此类实例。您添加了一个刚删除的实体,会出现什么问题?它也在EF7上工作。我想,我可以在数据库中插入和删除实体。例外情况很明显:已经在跟踪另一个具有相同密钥的此类实例。您添加了一个刚删除的实体,会出现什么问题?它也在EF7上工作。我想,我可以在数据库中插入和删除实体。谢谢!它做的工作!即使在处理事务错误时,它似乎也能正常工作。我不认为使用显式事务,因为它在EF7上工作。再次感谢汉克斯!它做的工作!即使在处理事务错误时,它似乎也能正常工作。我不认为使用显式事务,因为它在EF7上工作。再次感谢