как я могу пропустить передачу необязательного параметра в хранимую процедуру в Linq to SQL

#c# #.net #linq-to-sql

#c# #.net #linq-to-sql

Вопрос:

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

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

Спасибо

Ответ №1:

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

Вам нужно перегрузить ваш автоматически сгенерированный метод 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 или таблицу к нему, поэтому обязательно сохраните свои методы перед сохранением в нем, или, в качестве альтернативы, переместите все перегруженные методы в новый частичный класс.
  • Если у вас есть SPS со многими необязательными параметрами, вам придется генерировать перегруженные методы для всех возможных комбинаций, и это может быстро надоесть. Кроме того, в этом случае вам придется вызывать SP с именованными параметрами

Комментарии:

1. Кстати, ссылка снова активирована.

2. Для вас может быть, но для меня возвращает 404!

3. Конечно, работает, пожалуйста, дважды проверьте, что URL-адрес не обрезан и что у вас нет надстройки, которая могла бы его заблокировать. Если это все еще не работает, возможно, ваш провайдер блокирует его.

4. Это было очень кратко и превосходно! Особенно важно помнить о регенерации DBML. Всегда помещайте эти перегруженные методы в частичный класс, как он упоминал в разделе «Запомнить».

Ответ №2:

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

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