Вставка нескольких объектов с помощью Dapper - PullRequest
0 голосов
/ 01 ноября 2018

Я должен добавить список объектов, используя 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 голосов
/ 01 ноября 2018

Вы могли бы потенциально сделать следующее, если ваш код гарантирует этот уровень абстракции. Ваш объект может быть не таким выразительным, как вам хотелось бы, 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 может делать до семи элементов, но это позволит более полному объекту домена в коде и по-прежнему поддерживать вашу структуру в базе данных. Вы также можете выполнить приведенный выше синтаксис и передать коллекцию счетов со сложным объектом.

Не совсем то, что вы просили, но я чувствую, что это поможет вашему приложению в долгосрочной перспективе.

...