用dapper插入多个对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用dapper插入多个对象相关的知识,希望对你有一定的参考价值。
我必须使用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>();
}
有谁知道我做错了什么?使用这种方法,我可以在数据库中创建一个插入,但不能再创建。
答案
如果您的代码保证了这种抽象级别,您可能会执行以下操作。你拥有的对象可能没有你想象的那么富有表现力,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最多可以执行七项,但这样可以在代码中使用更全面的域对象,并且仍然可以在数据库中维护您的结构。您还可以执行上述语法并使用复杂对象传递发票集合。
不完全是你问的问题,但我确实认为从长远来看它会对你的应用有所帮助。
以上是关于用dapper插入多个对象的主要内容,如果未能解决你的问题,请参考以下文章