#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 с методом с необязательными параметрами