2016-08-22 4 views
1

loswerden Ich habe diese Funktion, die eine gespeicherte Prozedur in meiner Datenbank aufrufen sollte.Nullen in Funktionsaufruf

Die gespeicherte Prozedur benötigt eine Menge Argumente, benötigt aber nur drei von ihnen, um ausgeführt zu werden.

Wie kann ich es so machen, dass ich nur die Funktion mit diesen drei ausführen muss? Unten ist Arbeitscode, und eine Idee von dem, was ich dachte, wäre eine Lösung, ist es aber nicht.

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); 


} 

Wenn ich versuche, meine Idee zu laufen, heißt es:

Methode Public_OrderLine_Update 90 Parameter hat, aber mit drei Argumenten

Example of the Stored Procedure being executed

auch aufgerufen, was ist die beste Vorgehensweise in dieser Situation?

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

Okay, so die Antwort weiter unten, funktionieren würde, aber meine SP erfordert 90 Argumente, ist es eine Möglichkeit, diese oder tun zu erzeugen, muss ich nur tun das Grunzen selbst?

+1

Tun Sie einfach, was Ihre Idee sagt. Machen Sie eine Funktion mit 3 Argumenten, die nur die passenden Dinge aktualisiert. – byxor

+0

Das Problem ist, ich habe es bereits versucht und es gibt einen Fehler, wo es heißt: "Die Methode Public_OrderLine_Update hat 90 Parameter, wird aber mit 3 Argumente aufgerufen. –

+2

Sie sollten diese Informationen zu Ihrer Frage hinzufügen. – byxor

Antwort

1

ein Wrapper-Methode Sie sich, dass „ausbricht“ die Parameter one-by-one, so dass Sie Werte explizit passieren könnte, und halten implizit null s vorbei:

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); 
} 

Natürlich würden Sie lange sinnvoll nutzen Namen für arg1, arg2 usw.

jetzt Ihre Erweiterung mit C# Syntax rufen Sie für benannte Argumente zu übergeben Sie können:

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

Mein SP erfordert 90 Argumente, ist da Irgendwelche Möglichkeiten, diese zu erzeugen, oder muss ich nur die Grunt-Arbeit selbst erledigen? –

+0

Sie könnten wahrscheinlich einen Code-Generator dafür erstellen, aber wenn es nur einer ist und Sie nicht vorhaben, mehr zu machen, werden Sie wahrscheinlich schneller sein monkey-typing es einmal – Jcl

+0

@ BjørnHenneberg Das müssen Sie manuell tun, aber es sollte sehr wenig tippen, weil Sie in der Lage sein sollten, den bereits generierten Code für Ihr 'Public_Order_LineUpdate' als Ausgangspunkt zu verwenden (ich nehme an, dass Sie Verwenden Sie SP Mapping von LINQ2SQL oder EF). – dasblinkenlight