как я могу пропустить передачу необязательного параметра в хранимую процедуру в Linq для SQL - PullRequest
4 голосов
/ 12 апреля 2011

Я использую Linq to SQL с хранимыми процедурами.

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

Спасибо

Ответы [ 2 ]

3 голосов
/ 25 августа 2016

Поскольку упомянутая ссылка в помеченном ответе мертва, я изложил эту идею для будущих читателей (, конечно, я не читал упомянутую статью, но ниже будет работать, я проверял, прежде чем публиковать здесь )

Вам необходимо перегрузить автоматически сгенерированный метод вашего SP ( в классе .designer.cs ) и вырезать необязательные параметры (как вы знаете, по умолчанию, когдаВы помещаете хранимую процедуру в файл DBMLclass, он только автоматически генерирует функцию по умолчанию)

Например.с этим SP:

CREATE PROCEDURE sp_Test
    @optionalParam INT = 0
AS
    -- your logic gose here

В .designer.cs вы получите что-то вроде ниже по умолчанию

[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.sp_Test")]
public ISingleResult<sp_TestResult> sp_Test([global::System.Data.Linq.Mapping.ParameterAttribute(Name="optionalParam", DbType="Int")] System.Nullable<int> optionalParam)
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), optionalParam);
    return ((ISingleResult<sp_TestResult>)(result.ReturnValue));
}

Так что вам нужно overload это, вот код:

[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.sp_Test")]
public ISingleResult<sp_sp_TestResult> sp_Test()
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())));
    return ((ISingleResult<sp_sp_TestResult>)(result.ReturnValue));
}

Помните

  • DBML designer file будет сгенерирован заново каждый раз, когда вы добавляете / удаляете в него любой SP или таблицу, поэтому убедитесь, чтосохранить ваши методы, прежде чем вы сохраните их, или, в качестве альтернативы, переместите все перегруженные методы в новый частичный класс.
  • Если у вас есть SP с множеством необязательных параметров, вам придется генерировать перегруженные методы для всех возможных комбинаций,и это может быстро раздражать.Также в этом случае вам придется вызывать ИП с именованными параметрами
2 голосов
/ 12 апреля 2011

Вы можете сделать это: http://challadotnetfaq.blogspot.com/2009/05/stored-procedure-optional-parameters.html

вы можете, если вы сопоставите sp с методом с необязательными параметрами

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