Чтение данных, возвращаемых из хранимой процедуры - PullRequest
0 голосов
/ 02 сентября 2011

У меня есть хранимая процедура, которая возвращает таблицу (или набор данных, или представление, или как там она вызывается, она возвращает результат select).Я использую Entity Framework, и я ожидаю, что он будет обрабатывать хранимый процесс как таблицу, создавая объект.Когда я добавляю proc в схему сущностей, он добавляется, но класс не создается (в схеме или в intellisense ничего не появляется).

Я не хочу использовать это решение для набора данных, которое выглядит некрасивым и неоптимизированным:

SqlCommand sqlCommand = new SqlCommand("sp_ProjetsVoxco");
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Connection = new SqlConnection(
    Settings.Default.ConnectionStringTransit);
SqlDataAdapter sa = new SqlDataAdapter(sqlCommand);
DataSet dataSet = new DataSet();
sa.Fill(dataSet);

Я нашел строку, которая кажется очень аккуратной:

var x = context.ExecuteStoreQuery<T>("sp_ProjetsVoxco");

Но поскольку структура сущностей не генерировала класс, я не совсем уверен, что делатьс T.

Ответы [ 2 ]

4 голосов
/ 02 сентября 2011

Добавление хранимой процедуры в модель недостаточно. Вы также должны добавить функцию импорта . Импорт функции - это отображение хранимой процедуры на метод в вашем контексте (метод должен быть сгенерирован для вас). В этом отображении вы можете либо сопоставить результат с существующим объектом, сложным типом, либо определить новый сложный тип.

ExecuteStoreQuery не имеет ничего общего с импортированной хранимой процедурой. Он используется для непосредственного выполнения SQL (= в основном избегая EF), и T должен быть вашим пользовательским типом, который имеет общедоступные настраиваемые свойства с теми же именами, что и набор результатов, возвращаемый из вашей хранимой процедуры.

3 голосов
/ 02 сентября 2011

Я предполагаю, что у вас есть файл edmx, и вы сейчас пытаетесь добавить процедуру хранения, которую вы уже создали в базе данных.

1 - вам следует добавить процедуру хранения, котораядобавив его, как и любую другую таблицу, используя опцию Обновить модель из базы данных , это заставит EF узнать о SP.(Поскольку у меня уже есть SP, я показываю вкладку Refresh, но вы увидите свои SP на вкладке Add, если вы еще не добавили их)

enter image description here

2 - импортировать функцию

enter image description here

3 - присвоить ей имя и создать новый сложный тип

enter image description here

4 - Нажмите OK и используйте имя нового метода

public IEnumerable<mySPMethodCallName_Result> ListAllServiceLogsFromSP(decimal clientId)
{
    var r = from sp in db.sp_ListServiceLogsByClientId(clientId)
            select sp;

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