EFCore Add Entity с помощью childEntity Throw отслеживает тот же ключ - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь обновить свой код с ef6 до efcore, в EF 6 введите неправильное значение ключа foregin для ребенка, Context.Set.Add () not Check key. и после Add () сработает исправление отношений (автоматическое изменение свойства FK), затем SaveChange, но EF Core, когда Add () сгенерирует ключ, уже отслеживается

Microsoft.EntityFrameworkCore 2.2.4 Pomelo.EntityFrameworkCore.MySql 2.2

var defaultPk = "OneCrud_UnitTest";
            var defaultPk2 = "OneCrud_UnitTest2";
            var item1 = new item { ItemGID = defaultPk,ItemID = defaultPk,TS=DateTime.Now };
            item1.itemDetail = new List<itemDetail>();
            var detail1 = new itemDetail() //itemDetail HasKey(t => new { t.ItemGID,t.LineId});
            {
                GUID = Guid.NewGuid().ToString(),
                ItemGID = defaultPk,//this is foregin key 
                LineId = 1
            };
            item1.itemDetail.Add(detail1);
            unitOfWork.DataContext.Set<item>().Add((item1));
            unitOfWork.Commit();

            var item = itemRepository.GetByID(defaultPk);
            var item2 = new item { ItemGID = defaultPk2 };
            item2.ItemID = item2.ItemGID;
            item2.TS = DateTime.Now;
            item2.itemDetail = new List<itemDetail>();
            item2.itemDetail.Add(new itemDetail {
                ItemGID = defaultPk, //in ef 6 will auto fix up to defaultPk2 after Add(), and not throw exception 
                LineId = 1,
                GUID = Guid.NewGuid().ToString(),
            });
            unitOfWork.DataContext.Set<item>().Add((item2)); // in ef core this line will throw exception "has tracked same key  ItemGID[OneCrud_UnitTest],LineId[1]"
            unitOfWork.Commit();

можно ли отключить проверку ключа сохранения или исправить значение внешнего ключа вручную перед вызовом метода Add ()

...