На этом сайте было задано множество вопросов, связанных с извлечением IDENTITY после выполнения вставки. То, как мы получаем личность, - это сделать вызов ниже, сразу после вызова SaveChanges();LINQ to Entities - как лучше всего получить значение IDENTITY после вызова SaveChanges()
context.MyClass.OrderByDescending(c => c.Id).FirstOrDefault();
Это, похоже, работает последовательно, может быть вполне адекватным; однако у него появляется возможность открыть потенциал для ошибки, если между вызовами будет добавлена другая запись. Итак, первый вопрос заключается в том, что, учитывая, что EF работает с трансациональным контекстом, звучит ли этот метод?
Во-вторых, ответ на следующий вопрос предполагает, что может быть лучший способ.
Linq to SQL - How to find the the value of the IDENTITY column after InsertOnSubmit()
В этом ответе, после вызова SubmitChanges(), следующий вызов (где «ТСТ» представляет класс пользователя) возвращает значение.
Response.Write("id:" + tst.id.ToString)
Это, кажется, работает точно так же, как в LINQ к организациям, где после завершения вызова, чтобы сохранить изменения экземпляра класса в настоящее время включает в себя идентификатор.
context.MyClass.Add(myClass);
context.SaveChanges();
int myNewIdentity = myClass.Id;
Поскольку мы задаем для фактического идентификатора экземпляра класса (фактической записи), то, казалось бы, надежен. И, кажется логичным, что разработчики EF должны сделать такую базовую функциональность доступной. Может ли кто-нибудь подтвердить, что это правильный способ получить личность или, по крайней мере, наилучшую практику?
Идентификация должна быть обновлена в основном для отслеживания изменений, поэтому да, это, скорее всего, лучший способ. – Marc