我有一個過程,需要在表值參數,與人相處:使用Dapper.TVP TableValueParameter與其他參數
CREATE PROCEDURE [dbo].[Update_Records]
@currentYear INT,
@country INT,
@records Record_Table_Type READONLY
AS
,我試圖用Dapper.TVP調用此。
這裏是我到目前爲止的代碼:
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);
}
我的問題是我如何通過這兩組參數的程序在調用短小精悍Execute()
?
我曾嘗試:
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);
和
connection.Execute("Update_Records", new Object[] { spParams, recordsParam }, commandType: CommandType.StoredProcedure);
兩個呼叫的過程,但將一個空表參數(SELECT COUNT(*) FROM @records
返回0)
我似乎無法找到任何實際文檔或Dapper.TVP的來源,因此整個事情是非常混亂,並且.Execute()
的第二個參數只是一個dynamic
s o再次不告訴我我能做什麼,也不能通過它。
任何想法?
相關:http://stackoverflow.com/a/24633764/23354 – 2014-10-08 06:50:24