Я пытаюсь обновить свой код с 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 ()