Сущность Entity Framework 4 с storegeneratedpattern = none не обновляет внешние ключи при сохранении
У меня есть объект, у которого в качестве первичного ключа указан int, для которого задано значение storegeneratedpattern = none, поэтому мы предоставляем клиентскую часть id.
Эта сущность имеет дочерние сущности, которые ссылаются на нее через связь с навигацией и идентификатором внешнего ключа.
Если я создаю новую родительскую сущность и добавляю дочернюю, затем устанавливаю первичный ключ родительской сущности и сохраняю, исправление внешнего ключа для дочернего объекта происходит ПОСЛЕ сохранения и не сохраняется в базе данных.
например
engine = new Engine();
part = new Part();
engine.Parts.Add(part);
engine.Id = 6;
engineRepository.Save(engine);
Сохранить просто
Context.Engines.AddObject(entity);
Context.SaveChanges();
После сохранения "part" будет иметь внешний ключ "EngineId" = 6, но в базе данных это будет "EngineId" = 0, то есть кажется, что исправление произошло после сохранения.
Что мне здесь не хватает? Все это работает нормально, если созданный паттерном для двигателя является личность.
2 ответа
Разрешение в этом случае заключается в том, что вы сохраняете график дважды: один раз для создания исправления и один раз для сохранения исправления. Это не очень хорошее решение, и я до сих пор не понимаю, почему мы должны это делать, но по крайней мере это означает, что мы можем позволить EF позаботиться о разрешении идентификатора.
Я думаю, что если вы создаете свой собственный идентификатор для движка, вы должны создать его и для части.
engine = new Engine();
part = new Part();
part.engineid = 6
engine.Parts.Add(part);
engine.Id = 6;
engineRepository.Save(engine);