#sql #asp.net-core
#sql #asp.net-core
Вопрос:
Это кажется глупым, но я не могу найти ни одного примера кода, который показывает, как получить последний вставленный id
при выполнении запроса insert с ExecuteSqlRaw
var sql = @"INSERT INTO [MyDb-Dev].[dbo].[" table "] (...) VALUES (...)";
_context.Database.ExecuteSqlRaw(sql);
Как мне получить последний вставленный id
файл?
Спасибо за вашу помощь
Комментарии:
1. Уверен, что вы можете сделать это с помощью выходного параметра. Взгляните на эту ссылку: yogihosting.com/stored-procedures-entity-framework-core
2. но как вы можете сохранить идентификатор вставленной записи в выходном параметре?
Ответ №1:
Вы можете получить вставленный идентификатор с OUTPUT
помощью MS SQL Server.
ВЫВОД возвращает информацию или выражения на основе каждой строки, на которую влияет оператор INSERT, UPDATE, DELETE или MERGE. Эти результаты могут быть возвращены в приложение обработки для использования в таких вещах, как сообщения с подтверждением, архивирование и другие подобные требования к приложению.
var sql = @"INSERT INTO [MyDb-Dev].[dbo].[" table "] (...) OUTPUT inserted.Id VALUES (...)";
int returnValue = _context.Database.SqlQuery<int>(sql).FirstOrDefault();
Комментарии:
1. это не работает, я вставляю запись, вводя идентификатор, он должен быть 23 (идентификатор в БД тоже), возвращаемое значение равно 1
2. это делается для всех вставленных записей
3. Я попытался использовать ExecuteSqlCommand, та же проблема, при тестировании фиктивного запроса в SQL возвращается правильный value…is есть ошибка где-то в API?
4. @phil123456 Я обновил свой ответ, вместо ExecuteSqlCommand вы можете использовать SqlQuery и преобразовать значение в int.
Ответ №2:
добавьте это в запрос
;SELECT @LastCreatedId = CAST(SCOPE_IDENTITY() as int)
добавьте параметр к вызову
var returnCode = new SqlParameter("@LastCreatedId", SqlDbType.Int);
returnCode.Direction = ParameterDirection.Output;
получите значение следующим образом
_context.Database.ExecuteSqlCommand(sql3, parameters);
returnValue = (int)returnCode.Value;
Комментарии:
1. Это работает только в том случае , если в таблице есть свойство с идентификатором на нем …