无法跟踪实体类型 'Trade' 的实例,因为另一个具有键值的实例



我已经研究这个问题2天了,尽管我做了很多研究,但我还是不能解决这个问题。让我解释一下。

在TradeDetails页面中,我注意到只有当我使用这个函数集时:

public List<string> ChoosedLabels
{
get { return trade.Labels; }
set
{
if (value == null)
{
value = new();
}

new Task(async () =>
{
trade.Labels = value;
_context.Trades.Attach(trade);
_context.Entry(trade).State = EntityState.Modified;
_context.SaveChanges();

await LoadTrade();
}).Start();
}
}

在另一页,当我只使用这部分代码时:

foreach(var i in trades)
{
if (i.Labels.Contains(labelSupprime.NomLabel))
{
i.Labels.Remove(labelSupprime.NomLabel);
}
}
_context.Trades.UpdateRange(trades);
_context.SaveChanges();

这个错误来找我:

"无法跟踪实体类型为"Trade"的实例,因为键值为"{Id: 62}"的另一个实例已经在被跟踪。在附加现有实体时,确保只附加一个具有给定键值的实体实例。">

我知道这是由于我提到的一个代码片段,但我不能找出问题所在。提前感谢

在第一页中,更改为以下代码

public List<string> ChoosedLabels
{
get { return trade.Labels; }
set
{
if (value == null)
{
value = new();
}
new Task(async () =>
{
trade = await _context.Trades.FindAsync(trade.Id);
trade.Labels = value;
_context.SaveChanges();
await LoadTrade();
}).Start();
}
}

在第二页中,尝试将代码更改为如下

for(int x = 0; x < trades.Count(); x++)
{
trades[x] = await _context.Trades.FindAsync(trades[x].Id);
if (trades[x].Labels.Contains(labelSupprime.NomLabel))
{
trades[x].Labels.Remove(labelSupprime.NomLabel);
}
}
_context.Trades.UpdateRange(trades);
_context.SaveChanges();

希望有帮助

相关内容

最新更新