使用精巧的工具插入多个对象

时间:2018-11-01 17:04:52

标签: c# api postman 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>();
}

有人知道我在做什么错吗?使用这种方法,我可以在数据库中创建一个插入,但不能再创建一个。

1 个答案:

答案 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最多可以执行七个项目,但这将允许代码中包含更全面的域对象,并且仍然可以在数据库中维护您的结构。您也可以执行上述语法,并通过复杂对象传递发票集合。

并不是您所要求的,但我确实认为从长远来看,它将帮助您的应用程序。