Как передать параметры в хранимую процедуру из Entity Framework? - PullRequest
5 голосов
/ 30 ноября 2011

Я хочу знать, как отправлять параметры в хранимую процедуру из структуры объекта?Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 01 декабря 2011

Первый вопрос: для какой версии Entity Framework ?? .NET 3.5? .NET 4 ?? Вещи значительно изменились (и улучшились!) В .NET 4.

А во-вторых: что вы хотите сделать:

  • извлечение строк из базы данных

  • выполнить сохраненный процесс без возвращаемого значения

  • отобразить операции INSERT / UPDATE / DELETE на объекте с сохраненным процессом ??

Это три довольно разных сценария, поэтому нам нужно знать, к чему вы стремитесь.

Также: просто выполните поиск с помощью Google (или Bing) - есть множество постов в блогах и учебных пособий, показывающих, как это сделать - быстрый список:

и буквально тысячи других ......

Обновление: ОК, поэтому вы хотите получить данные из базы данных. В этом случае ваши шаги:

  • перейти к вашей модели EF (* .edmx файл) в конструкторе
  • щелкните правой кнопкой мыши и выберите Update Model from Database
  • выберите хранимую процедуру, которую вы хотите использовать, и пройдите мастер

enter image description here

Это создает запись для хранимой процедуры в вашей физической модели хранения. Далее:

  • перейдите в Model Browser (см. Контекстное меню выше? Это чуть ниже Update Model from Database), перейдите к модели хранилища и найдите вашу процедуру
  • щелкните правой кнопкой мыши по этой процедуре

enter image description here

  • Выберите Add Function Import, который импортирует «функцию» (хранимую процедуру) из физической модели хранения в концептуальную модель (в основном, контекстный класс вашей сущности).

enter image description here

Здесь у вас есть четыре варианта:

  • ваш сохраненный процесс может ничего не возвращать (как в моем примере) - тогда вы можете просто вызвать метод в вашем классе контекста, который что-то делает
  • ваш сохраненный процесс может вернуть коллекцию скаляров, например список значений INT или что-то - выберите соответствующее значение в раскрывающемся списке
  • ваш сохраненный процесс может вернуть сущностей из вашей модели, например завершить Customer сущности - в этом случае выберите последний вариант и выберите сущность, с которой вы хотите сопоставить (ваш сохраненный процесс должен вернуть все столбцы для этой сущности, в данном случае)

OR

  • ваш хранимый процесс возвращает что-то - но не только скаляры (не просто INT), ни сущность - в этом случае вы можете выбрать третий вариант и определить новый сложный тип (класс), который будет содержать ваши результаты, возвращенные из хранимая процедура.

Что бы вы ни делали - в основном EF создаст метод для вашего класса контекста объекта, который вы можете вызвать. Любые параметры, которые требует ваш сохраненный процесс, будут параметрами этого метода , так что вы можете очень легко передать, например, строки, целые и т. д.

3 голосов
/ 30 августа 2012

Другой сценарий требует вызова хранимой процедуры с несколькими параметрами OUTPUT.Ниже приведен полный образец.

public void MyStoredProc(int inputValue, out decimal outputValue1, out decimal outputValue2)
{
    var parameters = new[] { 
        new SqlParameter("@0", inputValue), 
        new SqlParameter("@1", SqlDbType.Decimal) { Direction = ParameterDirection.Output }, 
        new SqlParameter("@2", SqlDbType.Decimal) { Direction = ParameterDirection.Output } 
    };

    context.ExecuteStoreCommand("exec MyStoredProc @InParamName=@0, @OutParamName1=@1 output, @OutParamName2=@2 output", parameters);

    outputValue1 = (decimal)parameters[1].Value;
    outputValue2 = (decimal)parameters[2].Value;
}

Обратите внимание на используемые типы (десятичные.) Если требуется другой тип, не забудьте изменить его не только в списке аргументов метода, но и SqlDbType.XXX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...