Я хочу обновить диапазон объектов в моем DbContext
:
var list = await repository.GetList(ids);
foreach (var entity in list)
{
entity.IsSomething = true;
}
await repository.UpdateRange(list.ToArray());
...
public async Task UpdateRange(TDomain[] domains)
{
DbSet.UpdateRange(domains); // exception on this line
DbContext.SaveChangesAsync(CancellationToken.None)
}
Когда я перехожу на DbSet.UpdateRange(domains)
в моем коде, выдается исключение:
сообщение: экземпляр типа сущности 'x' не может быть отслежен, потому что другой экземпляр с тем же значением ключа для {'Id'} уже отслеживается. При подключении существующих объектов убедитесь, что подключен только один экземпляр объекта с данным значением ключа. Подумайте об использовании DbContextOptionsBuilder.EnableSensitiveDataLogging, чтобы увидеть конфликтующие значения ключей. System.InvalidOperationException: экземпляр типа сущности 'x' не может быть отслежен, поскольку другой экземпляр с таким же значением ключа для {'Id'} уже отслеживается. При подключении существующих объектов убедитесь, что подключен только один экземпляр объекта с данным значением ключа. Подумайте об использовании DbContextOptionsBuilder.EnableSensitiveDataLogging для просмотра конфликтующих значений ключа.
Я добавил некоторый код в Watch
, чтобы проверить, что происходит в моем DbContext
.
DbContext.ChangeTracker.Entries().ToList();
В моих записях (до DbSet.UpdateRange(domains);
строки) есть две x
пустяков с IDs
, которые я прошел мимо TDomain[] domains
. Эти domains
имеют свойство State
, установленное на Unchanged
.
Мой вопрос: как найти пустые слова, которые DbContext
блокирует для редактирования из-за отслеживания? Кажется, что здесь все в порядке, но Entity Framework
есть что сказать по-другому.
Настройка x
объекта:
var entityTypeBuilder = modelBuilder.Entity<x>();
entityTypeBuilder.HasOne(x => ...).WithOne().HasForeignKey<...>(x => ...);
entityTypeBuilder.HasOne(x => ...).WithOne().HasForeignKey<...>(x => ...);
entityTypeBuilder.HasMany(x => ...).WithOne(x => ...).HasForeignKey(x => ...);
entityTypeBuilder.HasMany(x => ...)
.WithOne()
.HasForeignKey(x => ...);
entityTypeBuilder.HasMany(x => ...);
Возможно, что-то не так с дочерними элементами, но почему DbContext
не отображается в ChangeTracker
?