Идентификатор недавно добавленной сущности перед SaveChanges () - PullRequest
12 голосов
/ 17 мая 2011

Я добавляю объект в свою базу данных следующим образом:

public TEntity Add(TEntity entity)
{
     return (TEntity)_database.Set<TEntity>().Add(entity);
}

Однако метод DbSet.Add не возвращает вновь добавленную сущность с идентификатором и т. Д., Он просто возвращает объект, который я передал моему методу Add.

Должно ли оно передавать мне обратно полностью новую сущность, включая Id, или невозможно получить Id до вызова SaveChanges()?

1 Ответ

18 голосов
/ 17 мая 2011

Все, что делает вызов Add(), - это эффективная регистрация в контексте данных, чтобы можно было отслеживать сущность. В настоящее время с базой данных не выполняется никаких действий, пока (как вы правильно заметили) вы не позвоните SaveChanges().

Я предполагаю, что вы используете автоматически генерируемые идентификаторы в вашей таблице; в данном случае это механизм базы данных, который будет генерировать этот Id при вставке записи, и Entity Framework прочитает это обратно и заполнит вашу сущность за вас.

Итак, чтобы подтвердить ваши подозрения, нет - невозможно получить Id до вызова SaveChanges() в этом случае.

Надеюсь, это поможет!

...