我必须使用Dapper添加对象列表。
Dapper动态参数抛出SQLException“必须定义标量变量”是在数据库中成功创建第一个对象后收到的错误。
这是CS :
public class Inventorytransaction
{
//InventoryHeader
public int id { get; set; }
public int transactionumber { get; set; }
public string storeroom { get; set; }
public string transactiontype { get; set; }
public string projectname { get; set; }
public string comments { get; set; }
public DateTime date { get; set; }
//InventoryLine
public string locationtype { get; set; }
public string lc { get; set; }
public string itemnum { get; set; }
public decimal quantity { get; set; }
public string uom { get; set; }
public decimal unitprice { get; set; }
以下是调用该过程的代码:
public void AddInventoryTransaction(Inventorytransaction inventorytransaction)
{
{
List<Inventorytransaction> inventorytransactions = new List<Inventorytransaction>();
inventorytransactions.Add(inventorytransaction);
using (IDbConnection connection = new SqlConnection(_connectionString))
{
//TODO
connection.Execute("dbo.spAddNewInventoryHeader @Storeroom, @Transactiontype,@Projectname, @Comments", inventorytransaction);
}
}
}
public void AddInventoryTransactionLine(Inventorytransaction inventorytransaction)
{
List<Inventorytransaction> inventorytransactions = new List<Inventorytransaction>();
inventorytransactions.Add(inventorytransaction);
using (IDbConnection connection = new SqlConnection(_connectionString))
{
//TODO
connection.Execute("dbo.spAddNewInventoryLine @Storeroom, @Locationtype,@Lc, @Itemnum,@Quantity,@Uom,@Unitprice", inventorytransaction);
}
}
这是界面:
interface IInventorytransactionRepository
{
void List<AddInventoryTransaction>();
}
有人知道我在做什么错吗?使用这种方法,我可以在数据库中创建一个插入,但不能再创建一个。
答案 0 :(得分:0)
如果您的代码需要这种抽象级别,则可以执行以下操作。您拥有的对象可能不如您期望的那样富有表现力,Dapper支持复杂的对象功能。您可以执行以下操作:
public class Invoice
{
public int Id { get; set; }
public int Transaction { get; set; }
...
public IEnumerable<LineItem> LineItems { get; set; }
}
public class LineItem
{
public int Id { get; set; }
...
}
您的发票对象将包含一个订单项,在Dapper中,您可以执行以下操作:
dbConnection.Execute<Invoice, LineItem, Invoice>("query", (invoice, lineItem) =>
{
invoice.LineItem = lineItem;
return invoice;
}, new { Id = "Parameters here" });
Dapper最多可以执行七个项目,但这将允许代码中包含更全面的域对象,并且仍然可以在数据库中维护您的结构。您也可以执行上述语法,并通过复杂对象传递发票集合。
并不是您所要求的,但我确实认为从长远来看,它将帮助您的应用程序。