用dapper插入多个对象

问题描述 投票:1回答:1

我必须使用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>();
}

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

c# api postman dapper
1个回答
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最多可以执行七项,但这样可以在代码中使用更全面的域对象,并且仍然可以在数据库中维护您的结构。您还可以执行上述语法并使用复杂对象传递发票集合。

不完全是你问的问题,但我确实认为从长远来看它会对你的应用有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.