Ich habe ein Verfahren, das in einem Tabellenwertparameter nimmt, zusammen mit anderen:Mit Dapper.TVP TableValueParameter mit anderen Parametern
CREATE PROCEDURE [dbo].[Update_Records]
@currentYear INT,
@country INT,
@records Record_Table_Type READONLY
AS
und ich versuche, dies mit Dapper.TVP zu nennen.
Hier ist der Code, den ich bisher habe:
var recordsParameter = new List<SqlDataRecord>();
// This metadata matches 'Record_Table_Type' in the Database
var recordsMetaData = new[]
{
new SqlMetaData("OriginalValue", SqlDbType.Decimal, 19, 4),
new SqlMetaData("NewValue", SqlDbType.Decimal, 19, 4),
new SqlMetaData("NewPercent", SqlDbType.Decimal, 7, 2),
};
foreach (var r in records)
{
var record = new SqlDataRecord(recordsMetaData);
record.SetDecimal(0, r.OriginalValue);
record.SetDecimal(1, r.NewValue);
record.SetDecimal(2, r.NewPercent);
recordsParameter.Add(record);
}
var spParams = new DynamicParameters(new
{
currentYear = filter.currentYear,
country = filter.country,
});
var recordsParam = new TableValueParameter("@records", "Record_Table_Type", recordsParameter);
using (var connection = ConnectionFactory.GetConnection())
{
connection.Execute("Update_Records", ???, commandType: CommandType.StoredProcedure);
}
Mein Problem ist, wie gehe ich beiden Sätze von Parametern der Prozedur in dem Aufruf Execute()
adretten?
Ich habe versucht:
var spParams = new DynamicParameters(new
{
currentYear = filter.currentYear,
country = filter.country,
records = new TableValueParameter("@records", "Record_Table_Type", recordsParameter);
});
connection.Execute("Update_Records", spParams, commandType: CommandType.StoredProcedure);
und
connection.Execute("Update_Records", new Object[] { spParams, recordsParam }, commandType: CommandType.StoredProcedure);
Sowohl die Prozedur aufrufen, sondern eine leere Tabelle Parameter übergeben (SELECT COUNT(*) FROM @records
liefert 0)
ich nicht zu finden scheinen, jede tatsächliche Dokumentation oder Quelle für Dapper.TVP, so dass die ganze Sache sehr verwirrend ist, und der zweite Parameter auf .Execute()
ist nur dynamic
s o das sagt mir wiederum nicht, was ich kann und was nicht.
Irgendwelche Ideen?
Related: http://StackOverflow.com/A/24633764/23354 –