Мы используем EF Core 3.1
У нас есть 2 объекта - item
и batch
. У каждого есть ссылка на currency
. Когда мы добавляем как элемент, так и пакет, каждый со ссылкой на загруженный (и отслеживаемый) currency
EF Core выплевывает следующее System.InvalidOperationException
:
The instance of entity type 'Currency' cannot be tracked because another instance with the key value '{Id: 103}' is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached.
Мы тоже ничего не делаем нерегулярно:
var currency = _context.Set<Currency>.SingleOrDefault(currencyId);
var item = new Item(currency);
var batch = Batch.Create(currency, new[] { item });
_context.Set<Batch>.Add(batch);
item.Batch = batch;
_context.Set<Item>.Add(instruction);
А у наших карт есть fks et c ItemMap
:
modelBuilder
.HasOne(i => i.Currency)
.WithMany()
.IsRequired();
modelBuilder
.HasOne(i => i.Batch)
.WithMany();
и BatchMap
:
modelBuilder
.HasOne(i => i.Currency)
.WithMany()
.IsRequired();
и CurrencyMap
:
modelBuilder
.ToTable("Currency")
.HasKey(cur => cur.Id);
modelBuilder
.HasData(new Currency(103));
Интересно, кто-нибудь может указать на мою глупость или хотя бы объяснить, где я могу ошибаться?