2016-08-22 1 views
1

У меня есть эта функция, которая должна вызывать хранимую процедуру в моей базе данных.Избавиться от нулей в вызове функции

Хранимая процедура требует много аргументов, но на самом деле ей действительно нужно три из них для запуска.

Как я могу это сделать, поэтому мне нужно только запустить функцию с этими тремя? Ниже приведен рабочий код, и идея о том, что я думаю, будет решением, но не является.

public void UpdateOrderLine(int originalRecordId,int originalOrdered, int ordered) 
{ 
    //Working Code 

    Db.Public_OrderLine_Update(null, null, null, null, null, null, null, null, null, null, null, null, null, 
     null, null, null, null, null, null, null, null, null, null, null, null, null, ordered, null, null, null, 
     null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
     null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
     null, null, null, null, originalOrdered, null, null, null, null, null, null, originalRecordId, null, 
     null, null, null, null, null, null, null, null, null, null, null, null, null); 

    //Idea 

     Db.Public_OrderLine_Update(ordered: ordered, original_RecordId: originalRecordId, original_Ordered: originalOrdered); 


} 

Когда я пытаюсь запустить свою идею, он говорит:

Метод Public_OrderLine_Update имеет 90 параметров, но вызывается с 3-мя аргументами

Example of the Stored Procedure being executed

Кроме того, что наилучшая практика в этой ситуации?

----- EDIT ------

Хорошо, так ответ, приведенный ниже, будет работать, но мой SP требует 90 аргументов, есть ли способ, чтобы генерировать эти или мне просто нужно сделать сама ворчит?

+1

Просто сделайте то, что говорит ваша идея. Сделайте функцию с 3 аргументами, которые обновляют только соответствующие вещи. – byxor

+0

проблема в том, что я уже пробовал это, и он дает ошибку, где он говорит: «метод Public_OrderLine_Update имеет 90 параметров, но вызывается с 3 аргументами. –

+2

Вы должны добавить эту информацию к вашему вопросу. – byxor

ответ

1

Сделать метод оболочки, «прорывается» параметры один за другим, так что вы можете передать значения в явном виде, и продолжаете передавать null s неявно:

static void PublicOrderLineUpdate(
    this MyDbContext DB 
, int? arg1 = null 
, double? arg2 = null 
, string arg3 = null 
, int? arg4 = null 
, /* and so on */ 
, int? arg90 = null) { 
    DB.Public_Order_LineUpdate(arg1, arg2, arg3, ..., arg90); 
} 

Конечно, вы бы использовать длинный смысл имена для arg1, arg2 и т.д.

Теперь вы можете позвонить расширение с C# синтаксис для передачи именованных аргументов:

Db.Public_OrderLine_Update(arg3: ordered, arg42: originalRecordId, arg67: originalOrdered); 
+0

My SP требует 90 аргументов, есть ли любой способ сгенерировать их или мне просто нужно самому выполнить работу по ворчанию? –

+0

Возможно, вы можете создать генератор кода для него, но если это только один, и вы не планируете делать больше, вы, вероятно, будете быстрее monkey-typing it once – Jcl

+0

@ BjørnHenneberg Вам нужно будет сделать это вручную, но это займет очень мало ввода, потому что вы должны использовать код, уже сгенерированный для вашего 'Public_Order_LineUpdate', в качестве отправной точки (я предполагаю, что вы используйте сопоставление SP из LINQ2SQL или EF). – dasblinkenlight

Смежные вопросы