2015-12-23 8 views
2

У меня есть хранимая процедура:Получить несколько наборов результатов из хранимой процедуры с использованием ObjectContext

CREATE PROCEDURE uspGetData 
    ...Parameter 
AS 
    SELECT 'hello' AS 'HelloColumn' 
GO 

, а затем я использую ObjectContext для выполнения хранимой процедуры

((IOjbectContextAdapter)this).ObjectContext.ExecuteFunction<HelloClass>("uspGetData", .... Parameter); 

HelloClass просто класс данных

public class HelloClass 
{ 
    public string HelloColumn { ... } 
} 

и я получить идеальный результат, что мне нужно

, но теперь я требую, чтобы добавить еще один SELECT в хранимой процедуре, как этот

CREATE PROCEDURE uspGetData 
    ...Parameter 
AS 
    SELECT 'hello' AS 'HelloColumn' 
    SELECT 'byebye' AS 'ByeColumn' 
GO 

Конечно, в реальных условиях является более сложным и не только делать SELECT something

Теперь я не могу получить результаты, которые я требую, чтобы,

Я пытался сделать базовый класс на HelloClass

public class HelloClass : ByeClass 
{ ... } 

также я пытаюсь вставить 2 объекта установить в ObjectContext команду

((IOjbectContextAdapter)this).ObjectContext.ExecuteFunction<HelloClass,ByeClass>... 

Есть в любом случае, чтобы получить оба набора результатов из хранимой процедуры?

+2

Нет, насколько я знаю, EF не поддерживает хранимые процедуры с несколькими наборами результатов - вы либо должны иметь несколько отдельных хранимых процедур, каждый из которых возвращает единый результирующий набор, или вам нужно использовать «сырой» ADO.NET для обработки этих результатов –

ответ

0

Да, есть способ.

using (var db = new YourContext()) 
{ 
     var cmd = db.Database.Connection.CreateCommand(); 
     cmd.CommandText = "YourStoredProcedure"; 
     db.Database.Connection.Open(); 
     var reader = cmd.ExecuteReader(); 
     ObjectResult<HelloClass> table1 = ((IObjectContextAdapter)db).ObjectContext.Translate<HelloClass>(reader, "HelloClass", MergeOption.AppendOnly); 
     reader.NextResult(); 
     ObjectResult<HelloClass2> table2 = ((IObjectContextAdapter)db).ObjectContext.Translate<HelloClass2>(reader, "HelloClass2", MergeOption.AppendOnly); 
} 

для получения дополнительной информации проверить это: https://msdn.microsoft.com/en-us/data/jj691402.aspx