Die Instanz der entity-Typ 'Element' kann nicht verfolgt werden, weil eine andere Instanz mit dem gleichen key-Wert für {'Id'} bereits verfolgt wird

Ich bin mir bewusst, dass diese Frage schon gefragt wurde, aber die Lösung hat mir nicht geholfen.

[Fact]
public async Task UpdateAsync()
{
    string newTitle = "newTitle1";
    int newBrandId = 3;
    var item = await storeContext.Items.AsNoTracking().FirstOrDefaultAsync();
    item.BrandId = newBrandId;
    item.Title = newTitle;
    storeContext.Entry(item).State = EntityState.Detached;
    await service.UpdateAsync(item); //exception inside
    var updatedItem = await storeContext.Items.AsNoTracking().FirstOrDefaultAsync();
    Assert.Equal(newTitle, updatedItem.Title);
    Assert.Equal(newBrandId, updatedItem.BrandId);
}

public async Task UpdateAsync(T entity)
{
    _dbContext.Entry(entity).State = EntityState.Modified; //exception when trying to change the state
    await _dbContext.SaveChangesAsync();
}

Meldung: System.InvalidOperationException : Die Instanz der entity-Typ 'Element' kann nicht verfolgt werden, weil eine andere Instanz mit dem gleichen key-Wert für {'Id'} bereits verfolgt wird. Bei der Befestigung der vorhandenen Einrichtungen, sicherzustellen, dass nur eine Instanz der Entität mit einem bestimmten Schlüssel-Wert angefügt wird. Erwägen Sie die Verwendung 'DbContextOptionsBuilder.EnableSensitiveDataLogging' zu sehen, die widersprüchlichen wichtige Werte.

interessant, die Ausnahme ist das gleiche, auch wenn kein Element retreived von db, wie so

//var item = await storeContext.Items.AsNoTracking().FirstOrDefaultAsync();
  var item = new Item()
  {
      Id = 1,
      BrandId = newBrandId,
      CategoryId = 1,
      MeasurementUnitId = 1,
      StoreId = 1,
      Title = newTitle
  };
  • versuchen Sie, um diese zu entfernen storeContext.Entry(item).State = EntityState.Detached; erstellen und dann posten manuell ein, wie Sie am Ende Ihre Frage
  • stellen Sie sicher, dass die DbContext verwendet in Ihren unit-test storeContext ist die gleiche Instanz, die verwendet wird in Ihrem service service.
  • Sicherstellen, dass sich keine anderen thread zu halten, kann dieses Objekt
  • die gleichen, nichts hat sich geändert. Fehler bewahrt auch mit nur einem test laufen, so dass ich Zweifel threads.
  • es ist das gleiche, nur verpackt im repository.
Schreibe einen Kommentar