Получение идентификатора вновь добавленной сущности без вызова SaveChanges?

#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.