Unterstützt Dapper SQL 2008 Table-Valued Parameters 2?

8

Ich weiß, dass Dapper TVF unterstützen kann, aber wie senden Sie zusätzliche Parameter zusammen mit TVF (ohne sie der IntDynamicParam-Klasse hinzuzufügen)? Siehe das folgende Beispiel von Tests.cs, ich habe geändert, um den zusätzlichen Parameter hinzuzufügen:

%Vor%

Ich habe Folgendes versucht, aber Fehler bekommen (Es existiert keine Zuordnung vom Objekttyp SqlMapper.Tests + IntDynamicParam zu einem bekannten verwalteten systemeigenen Providertyp.):

%Vor%

Danke für die Antwort Sam, aber die Frage war ein bisschen anders. Ich möchte wissen, wie man eine andere Variable zusammen mit dem Tupel übergibt. Siehe den modifizierten SP unten:

%Vor%     
mcpunjabi 02.08.2011, 14:22
quelle

7 Antworten

7

Es gibt sehr wenig Magie über IDynamicParameters Alles was Sie beachten müssen, ist die Implementierung von AddParameters auf dem Open IDbCommand.

Angenommen, Sie möchten ein Tupel von Ints, können Sie Folgendes implementieren:

%Vor%

Gefolgt von:

%Vor%

Dann können Sie Tupel mit übergeben:

%Vor%     
Sam Saffron 19.08.2011 06:02
quelle
5

Hier ist eine komplette Lösung, um das ICustomQueryParameter Schnittstelle und einen Code mit I (in der Unterseite angebracht Seite) schrieb, lassen Sie jede IEnumerable zu einem StoredProcedure senden adrett verwenden, selbst wenn T mehrere Eigenschaften hat:

Ссылка

Hier ist der Code aus dem Link:

%Vor%

Du musst ICustomQueryParameter immer noch folgendermaßen zusammenführen: Ссылка

    
Uri Abramson 20.02.2014 18:12
quelle
3

So habe ich eine generische Klasse benutzt. Das ist noch nicht perfekt. Wird diesen Beitrag aktualisieren, wenn ich Änderungen daran mache.

%Vor%     
Esen 21.05.2013 14:18
quelle
2

Es gibt ein nugget-Paket, Dapper TVP , das einige Klassen enthält, die die Verwendung von Tabellenwerten erleichtern .

Es sollte beachtet werden, dass das Paket von Dapper 1.12.1 oder höher abhängig ist.

Mit diesem Paket sieht die Übergabe eines tvp an eine gespeicherte Prozedur etwa so aus:

%Vor%     
Michael 17.04.2014 20:17
quelle
1

Ich musste auch Tabellenwerte und reguläre Parameter übergeben können. Die Kombination von @Esen und @ Roger-Joys Antworten gab mir die folgende Klasse. Diese Klasse ist speziell darauf ausgerichtet, den Typ 'stringlist_to_table' zu verwenden, Sie können ihn jedoch entsprechend Ihren Anforderungen ändern. Es schien mir sinnvoll, für jeden TVP-Typ, mit dem man sich befassen würde, eine spezifische Methode zu haben.

%Vor%

Verwendung:

%Vor%

Hier ist die Implementierung von DynamicParametersWithTVP. Es enthält im Wesentlichen eine DynamicParameters-Klasse, um das Nicht-TVP-Zeug zu handhaben, und das daraus für TVP aufgebaute.

%Vor%     
csm8118 25.07.2013 17:50
quelle
1

Ich mache das lieber:

%Vor%

Das Wörterbuch ist das:

%Vor%     
user3423986 15.03.2014 18:49
quelle
0

Wenn Sie Ihre benutzerdefinierte Klasse von DynamicParameters ableiten und IDynamicParameters implementieren, können Sie das oben genannte Problem lösen.

%Vor%

.....

Ich habe eine allgemeine Klasse geschrieben, mit der man einen solchen Prozess aufrufen kann:

%Vor%     
Roger Joys 08.02.2013 05:06
quelle