Вставки, использующие ESQL RawSQL, не возвращают IDENTITY

Дано:

В оригинальном сообщении я пытался вызвать db.Database.ExecuteCommand, с тех пор я изменил это на то, что вы видите здесь. (Который работает). Команда Execute всегда возвращала 0xfffff. SQLQuery возвращает значение последнего оператора выбора или вставленных строк в зависимости от того, как вы его кодировали.

using (db=new MyEntites())
{
    var inserted = db.Database.SqlQuery<decimal>(query,parms}
}

Где последние две строки в запросе:

SET NOCOUNT OFF  
Select SCOPE_IDENTITY() AS newID  

2 ответа

Решение

Благодаря вашим предложениям, шаг 1 поместил что-то вроде этого в строку запроса как последний выбор:

Select SCOPE_IDENTITY() as TESTID;

Затем используйте эту EF-форму SQLQuery, тип десятичной дроби - это то, что возвращается для приведенного выше примера выбора.

using (db=new MyEntites())
{
   var identity = db.Database.SqlQuery<decimal>(query,parms}
}

Из документации для ExecuteSqlCommand метод, возвращаемое значение

Результат, возвращаемый базой данных после выполнения команды.

Это означает, что вам нужно RETURN значение в вашей процедуре, а не в качестве результирующего набора. Так что сделайте это в вашей хранимой процедуре в качестве последней команды:

RETURN SCOPE_IDENTITY()
Другие вопросы по тегам