Сущность 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);
Другие вопросы по тегам