2017-02-14 6 views
2

Lassen Sie uns sagen, ich habe einen benutzerdefinierten Datentyp in der Datenbank: MySuperType, die als zwei Bigint Eigenschaften in ihm (Id +-Code)Dapper und benutzerdefinierte Datenbanktypen

Und ich habe eine gespeicherte Prozedur, die in jenen nimmt Parameter:

@MySuperType, @Price, @dateModified, etc... 

Jetzt in meinem Code verwende ich Dapper wie folgt aus:

using (var connecion = new SqlConnection(_connectionString)) 
{ 
    result = connection.Execute("SP_name", 
       new {mySuperType, price, date}, 
       commandType: CommandType.StoredProcedure); 
} 

Aber ich immer einen Fehler bekommen

Typ Operand-Konflikt: Dapper ist nicht in der Lage, den benutzerdefinierten Typ MySuperType aus den Parametern der gespeicherten Prozedur zuzuordnen.

die gespeicherte Prozedur ändern oder benutzerdefinierten Typs zu ersetzen, ist keine Option

Hat jemand eine Idee, was ich kann die Typen zuordnen tun und die Parameter (alle von ihnen) an den gespeicherte Prozedur?

Antwort

1

Tha Namen der Parameter müssen in Prozedur definierten Parameter entsprechen:

using (var connecion = new SqlConnection(_connectionString)) 
     { 
      result = connection.Execute("SP_name", 
       new {MySuperType = mySuperType, Price = price, dateModified = date}, 
       commandType: CommandType.StoredProcedure); 
     } 

Dapper Groß- und Kleinschreibung in Abbildung 2 in Richtungen (wie Parameter und als Ergebnisse) ist.

Wenn Sie Namen der Parameter vermeiden möchten angeben, stellen Sie sicher, dass es genau das gleiche in Variablen in C# und gespeicherte Prozedur.