#entity-framework #entity-framework-6
#entity-framework #entity-framework-6
Вопрос:
Есть ли способ получить Id
идентификатор вновь добавленного объекта без вызова SaveChanges
?
Например, в следующем примере, если я закомментирую вызов context.SaveChangesAsync()
, как показано ниже, значение FooId
, вставленное в newBar
запись, будет равно нулю.
var newFoo = new Foo() { ...};
context.Foos.Add( );
// await context.SaveChangesAsync();
new Bar() { FooId = newFoo.Id, ... }
context.Bars.Add( );
await context.SaveChangesAsync();
transaction.Commit();
Я использую Entity Framework 6.2.0, ориентированный на .NET Framework 4.6.1.
Комментарии:
1. Вновь добавленная сущность не добавляется до
SaveChanges()
вызова. Можете ли вы подробнее объяснить, «зачем» вам нужен идентификатор перед вызовом SaveChanges? Часто это примерно так: «Мне нужен новый идентификатор fooId для связи с моей панелью». Обычно это обрабатывается путем установки ссылки на Foo внутри вашей панели, добавления Foo в контекст, а затем установки панели. Foo = newFoo; перед вызовом SaveChanges и предоставлением EF управления FKS.2. @StevePy Спасибо, у меня уже есть ссылка на
Foo
внутреннюю панель. Я думаю, вы только что ответили на мой вопрос. Вот почему я задавался вопросом — почему это работало в прошлом? 🙂3. Во время SaveChanges будет выполнено исправление взаимосвязи, в результате которого для всех сущностей будут заданы значения FK, соответствующие значениям PK связанных свойств навигации, и будет произведена проверка FK, если они доступны. Что касается вашего вопроса: вы на 100% уверены, что переданное значение FK будет равно 0? Если это так, либо ваше сопоставление неверно, либо вы ошиблись с версией EF.