У меня странная проблема. Я загружаю объекты счета 1k, сначала заголовок, а затем детали в моем DAL. Я использую VB.NET в этом проекте. Я в состоянии получить заголовки счета просто отлично. Когда я загружаю детали для каждого счета, я получаю тайм-аут на SQL Server. Я увеличил время ожидания до 5 минут, но все равно. Если я уменьшу счет до 200, он будет работать нормально.
Вот что я делаю
//I already loaded the invoice headers. I am now iterating each invoice to get it's detail
For Each invoice As Invoice In invoices
drInvoiceItems = DBSqlHelperFactory.ExecuteReader(CONNECTION_STRING, CommandType.StoredProcedure, "dbo.getinvoiceitem", _
New SqlParameter("@invoicenumber", invoice.InvoiceNumber))
While drInvoiceItems.Read()
invoice.LineItems.Add(New InvoiceLine(drInvoiceItems("id"), drInvoiceItems("inv_id"), drInvoiceItems("prodid"), drInvoiceItems("name"), drInvoiceItems("barcode"), drInvoiceItems("quantity"), drInvoiceItems("costprice")))
End While
Next
Return invoices
Мне известно, что я запускаю 1k соединений с БД из-за итераций. Не могу ли я загрузить все позиции одним оператором select, а затем сделать что-то вроде
For Each invoice As Invoice In invoices
invoice.Items.Add(invoiceItems.Find(Function(i as InvoiceItem),i.InvoiceNumber = invoice.InvoiceNumber))
Next
Я получаю ошибку при использовании лямбда-функции выше
Ошибка 1 Значение типа «System.Collections.Generic.List (Of BizComm.InvoiceLine)» не может быть преобразовано в «BizComm.InvoiceLine». C: \ Projects \ BizComm \ InvoiceDAL.vb 75 35 BizComm