private void CreateMatchedWaybill(SentOrderLine orderLine) { var sendOrder = orderLine.Order; var waybill = new Waybill { ProviderDocumentId = sendOrder.Id.ToString(), DocumentDate = DateTime.Now, WriteTime = DateTime.Now, Address = sendOrder.Address, Supplier = session.Load <Supplier>(sendOrder.Price.SupplierId), }; var line = new WaybillLine { Product = orderLine.ProductSynonym, Producer = orderLine.ProducerSynonym, Quantity = (int?)orderLine.Count, SupplierCost = orderLine.Cost, }; waybill.AddLine(line); waybill.Calculate(settings, new List <uint>()); session.Save(waybill); session.Save(new WaybillOrder(line.Id, orderLine.ServerId.Value)); }
private List <WaybillLine> LoadMatchedWaybill(SentOrderLine line, IStatelessSession session) { if (line == null) { return(new List <WaybillLine>()); } var ids = session .CreateSQLQuery("select DocumentLineId from WaybillOrders where OrderLineId = :orderLineId") .SetParameter("orderLineId", line.ServerId) .List() .Cast <object>() .Select(Convert.ToUInt32) .ToList(); if (ids.Count == 0) { return(new List <WaybillLine>()); } var lines = session.Query <WaybillLine>() .Where(l => ids.Contains(l.Id)) .Fetch(l => l.Waybill) .ThenFetch(l => l.Supplier) .Fetch(l => l.Waybill) .ThenFetchMany(w => w.Lines) .ToList(); if (lines.Count > 0) { var result = lines[0].Waybill.Lines.OrderBy(l => l.Product).ToList(); //будь бдителен - хотя с точки зрения бд lines[0] и result.First(l => l.Id == lines[0].Id) один и тот же объект //nhibernate интерпретирует их как два разных объекта и выделение строки в ui не будет работать CurrentWaybillLine.Value = result.First(l => l.Id == lines[0].Id); return(result); } return(lines); }