Вставки, использующие 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()