Tôi có một thủ tục mà mất trong một tham số bảng giá trị, cùng với những người khác:Sử dụng Dapper.TVP TableValueParameter với các thông số khác
CREATE PROCEDURE [dbo].[Update_Records]
@currentYear INT,
@country INT,
@records Record_Table_Type READONLY
AS
và đang cố gắng để gọi đây với Dapper.TVP.
Dưới đây là đoạn code tôi có cho đến nay:
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);
}
Vấn đề của tôi là làm thế nào để tôi vượt qua cả bộ tham số cho các thủ tục trong các cuộc gọi đến Dapper Execute()
?
Tôi đã thử:
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);
và
connection.Execute("Update_Records", new Object[] { spParams, recordsParam }, commandType: CommandType.StoredProcedure);
Cả hai gọi thủ tục, nhưng vượt qua một tham số bảng rỗng (SELECT COUNT(*) FROM @records
trả về 0)
tôi dường như không thể tìm thấy bất kỳ tài liệu hoặc nguồn tài liệu thực tế nào cho Dapper.TVP, do đó, toàn bộ điều rất khó hiểu và tham số thứ 2 là .Execute()
chỉ là một dynamic
s o một lần nữa không nói cho tôi biết tôi có thể làm gì và không thể vượt qua nó.
Bất kỳ ý tưởng nào?
Related: http://stackoverflow.com/a/24633764/23354 –