Выполнение хранимых процедур из DbContext

У меня есть две простые хранимые процедуры в SqlServer:

  • SetData(@id int, @data varchar(10))
  • GetData(@id int).

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

Как лучше всего выполнить их из экземпляра DbContext?

Если возможно, я бы хотел избежать собственного управления состоянием подключения и/или раскрытия типов, специфичных для EF. Я начал с извлечения ObjectContext и просмотра функций Execute*, но документация довольно плохая и в ней отсутствуют примеры, связанные с хранимыми процедурами.

В идеале я хотел бы иметь возможность сделать это:

myContext.ExecuteNonQuery("SetData", id, data);
var data = myContext.ExecuteScalar<string>("GetData", id);

person Diego Mijelshon    schedule 08.06.2011    source источник


Ответы (1)


DbContext предлагает эти функции. Использовать:

IEumerable<...> result = myContext.Database.SqlQuery<...>(...)

для выполнения хранимой процедуры извлечения и

int result = myContext.Database.ExecuteSqlCommand(...)

для выполнения хранимой процедуры модификации данных.

person Ladislav Mrnka    schedule 08.06.2011
comment
А параметры? Должен ли я делать это, как указано здесь, или есть ярлык? stackoverflow.com/questions/4873607/ - person Diego Mijelshon; 08.06.2011
comment
Это один из способов. Это также должно работать без использования SqlParameter - просто передавать значения. Я не уверен, что вам не нужно ссылаться на них с помощью @p0, @p1 и т. д. при непосредственном использовании значений. - person Ladislav Mrnka; 08.06.2011
comment
В итоге я передал анонимный объект и внутренне преобразовал его в SqlParameters. - person Diego Mijelshon; 08.06.2011