用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插入多个对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在不明确指定主键的情况下使用 Dapper Extensions 将对象插入 PostGreSql?

如何在 Dapper.NET 中使用事务?

添加/插入 petapoco vs dapper 的风格

Dapper-小型ORM之王(C#.NET)

带有 MS Access 更新和插入问题的 Dapper

如何使用 Dapper.NET 将 C# 列表插入数据库