none
Хранимая процедура IMultipleResults RRS feed

  • Вопрос

  • Доброго времени суток!

    Использую LINQ для работы с MSSQL 2005. В базе есть хранимая процедура, возвращающая два результирующих набора данных, извлекаемых из двух временных таблиц. Простое "перетаскивание" из Server explorer в дизайнере класса Linq to SQL этой процедуры ничего не дает. Гуру, подскажите новичку, как ее добавить в этот класс?

    1 марта 2011 г. 8:22

Ответы

  •  Создайте сами в коде нужную процедуру IMultipleResults:

    	[Function(Name="dbo.VariableResultShapes")]
    	[ResultType(typeof(VariableResultShapesResult1))]
    	[ResultType(typeof(VariableResultShapesResult2))]
    	public IMultipleResults VariableResultShapes([Parameter(DbType="Int")] System.Nullable<int> shape)
    	{
    		IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), shape);
    		return ((IMultipleResults)(result.ReturnValue));
    	}
    
    

    Посмотрите статью на msdn - Как использовать хранимые процедуры, сопоставленные с несколькими результирующими формами (LINQ to SQL)

     


    Для связи [mail]
    • Предложено в качестве ответа Naomi N 3 марта 2011 г. 4:44
    • Помечено в качестве ответа touch_ua 6 марта 2011 г. 22:55
    2 марта 2011 г. 16:15
  • м в файле ИмяКонтекста.designer.cs ручками поправить, как советует уважаемый Abolmasov Dmitry (если я Вас правильно понимаю)

    При работе с автоматически сгенерированными классами (типа designer.cs) не стоит менять их содержимое, так как при обновлении схемы контекста вы потеряете все изменения. Правильно будет воспользоваться возможностями partial классов или функций, которые для таких изменений и созданы.
    • Помечено в качестве ответа touch_ua 6 марта 2011 г. 22:55
    4 марта 2011 г. 11:53

Все ответы

  •  Создайте сами в коде нужную процедуру IMultipleResults:

    	[Function(Name="dbo.VariableResultShapes")]
    	[ResultType(typeof(VariableResultShapesResult1))]
    	[ResultType(typeof(VariableResultShapesResult2))]
    	public IMultipleResults VariableResultShapes([Parameter(DbType="Int")] System.Nullable<int> shape)
    	{
    		IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), shape);
    		return ((IMultipleResults)(result.ReturnValue));
    	}
    
    

    Посмотрите статью на msdn - Как использовать хранимые процедуры, сопоставленные с несколькими результирующими формами (LINQ to SQL)

     


    Для связи [mail]
    • Предложено в качестве ответа Naomi N 3 марта 2011 г. 4:44
    • Помечено в качестве ответа touch_ua 6 марта 2011 г. 22:55
    2 марта 2011 г. 16:15
  • Получилось как-то сделать... Не знаю, насколько правильно, может кто поправит.

    1. Нужно, чтобы у процедуры в дизайнере в "Return type" встал (Auto-generated Type).
    Получилось только с "пустой" процедурой, в которой было прописано два левых select'а, например:
    select 1 as '1'
    select 1 as '1', 2 as '2'
    После этого уже в процедуру вставлялся нужный код.

    2. Затем в дизайнере были созданы два класса, с полями, соответствующими результирующим наборам из процедуры
    (обязательно нужно указать "Server Data Type" и "Source" для каждого поля иначе VS путается.)

    3. Ну и затем в файле ИмяКонтекста.designer.cs ручками поправить, как советует уважаемый Abolmasov Dmitry (если я Вас правильно понимаю)


    [Function(Name="dbo.ИмяПроцедуры")]
    [ResultType(typeof(ИмяКласса1))]
    [ResultType(typeof(ИмяКласса2))]
    public IMultipleResults VariableResultShapes([Parameter(DbType="Int")] System.Nullable<int> shape)
    {
      IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), shape);
      return ((IMultipleResults)(result.ReturnValue));
    }

    3 марта 2011 г. 9:01
  • м в файле ИмяКонтекста.designer.cs ручками поправить, как советует уважаемый Abolmasov Dmitry (если я Вас правильно понимаю)

    При работе с автоматически сгенерированными классами (типа designer.cs) не стоит менять их содержимое, так как при обновлении схемы контекста вы потеряете все изменения. Правильно будет воспользоваться возможностями partial классов или функций, которые для таких изменений и созданы.
    • Помечено в качестве ответа touch_ua 6 марта 2011 г. 22:55
    4 марта 2011 г. 11:53
  • Точно, при каждом изменении все "ручные" правки теряются...

    Создание partial класса разрешило ситуацию. Спасибо! :-)

    6 марта 2011 г. 12:27