Linq2Sql Designer превращает набор результатов нескольких процедур хранения в один - PullRequest
3 голосов
/ 02 марта 2010

В классе linq2sql я вызываю хранимую процедуру, которая возвращает несколько наборов результатов, и она работает.

Всякий раз, когда я добавляю новую процедуру в конструктор linq2sql, и она незаметно преобразует вышеупомянутую хранимую процедуру из IMultipleResults в ISingleResult в designer.cs.

Я заменил код предыдущей версией, и она работает, но почему это происходит?

Как запретить дизайнеру изменять работающий код?

Каждый раз, когда я добавляю новый sp, мне приходится отменять действия дизайнера.

Это

[Function(Name="dbo.GetCustomerOrderDetails")]
[ResultType(typeof(GetCustomerOrderSummaryResult))]
[ResultType(typeof(GetOrderLineDetailsResult))]

public IMultipleResults GetCustomerOrderDetails([Parameter(DbType="UniqueIdentifier")] System.Nullable<System.Guid> custGuid, [Parameter(DbType="VarChar(75)")] string email, [Parameter(DbType="Int")] System.Nullable<int> orderId)
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), custGuid, email, orderId);
       return (IMultipleResults)result.ReturnValue;
}

изменяется на это дизайнером linq2sql

[Function(Name="dbo.GetOrderLineDetails")]
public ISingleResult<GetOrderLineDetailsResult> GetOrderLineDetails([Parameter(DbType="Int")] System.Nullable<int> orderId)
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), orderId);
    return ((ISingleResult<GetOrderLineDetailsResult>)(result.ReturnValue));
}

, который я в конечном итоге отменю вручную.

Ответы [ 2 ]

4 голосов
/ 02 марта 2010

Производный класс DataContext, который создает дизайнер OR, объявляется как частичный класс. Создайте другой файл, который расширяет этот частичный класс, переместите в этот файл конкретный код, который конструктор OR продолжает изменять, плюс класс GetOrderLineDetailsResult. Затем удалите sp из ИЛИ конструктора. ИЛИ дизайнер должен оставить ваш код без изменений.

1 голос
/ 02 марта 2010

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

...