EF Core - 2 объекта, каждый со ссылкой на другой объект поиска. При добавлении - IOE - невозможно отследить, потому что другой экземпляр со значением ключа - PullRequest
0 голосов
/ 06 апреля 2020

Мы используем 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));

Интересно, кто-нибудь может указать на мою глупость или хотя бы объяснить, где я могу ошибаться?

...