2015-03-18 2 views
2

Я использовал по коду в течение длительного времени, но я думаю, что он неэффективен, потому что он должен выполняться несколько раз.Как использовать (.NET и NHibernate - CreateSQLQuery) (из-за использования «Foreach»)

Итак, я хочу отказаться от «Foreach» и того же выступления.

public void SaveProgramListinsertWithCart(List<ProductDto> insertList) 
{ 
     foreach (ProductDto insertItem in insertList) 
     { 
      Session.CreateSQLQuery(@"insert into Cart (ProdCode, Qty, CustId) 
             values (:prodCode, :qty, :custid)")     
      .SetParameter("prodCode", insertItem.ProdCode, NHibernateUtil.String) 
      .SetParameter("qty", insertItem.Qty, NHibernateUtil.Int32) 
      .SetParameter("custid", insertItem.CustId, NHibernateUtil.String) 
      .List(); 
     }      
} 

ответ

2

Для выполнения вставки/обновления с CreateSQLQuery, вы должны вызвать метод ExecuteUpdate, для образца:

foreach (ProductDto insertItem in insertList) 
{ 
    var query = Session.CreateSQLQuery(@"insert into Cart (ProdCode, Qty, CustId) 
             values (:prodCode, :qty, :custid)")     
         .SetParameter("prodCode", insertItem.ProdCode, NHibernateUtil.String) 
         .SetParameter("qty", insertItem.Qty, NHibernateUtil.Int32) 
         .SetParameter("custid", insertItem.CustId, NHibernateUtil.String); 

    int result = query.ExecuteUpdate(); 
}  

С другой стороны, я не думаю, использовать SQL, чтобы выполнить вставка - лучший подход, с которым вы можете работать, и инструмент ORM, такой как NHibernate. Лучший подход, на мой взгляд, если размещать отображенный объект в ISession, например, для образца:

foreach (ProductDto insertItem in insertList) 
{ 
    var product = new Product(); 
    product.ProdCode = insertItem.ProdCode; 
    product.CustId = insertItem.CustId; 
    product.Qty = insertItem.Qty; 

    Session.Save(product); 
}  
+0

Спасибо за ваш ответ, но ваш код до сих пор используется «FOREACH». –

+0

Итак, я думаю, что он должен быть подключен DB несколько раз. Я знаю, что соединение IO влияет на производительность программы. По этой причине я действительно хочу удалить «FOREACH». –

+0

Ну, вам нужно разместить каждую запись для каждого элемента в списке правильно? Вам нужен этот цикл. Вы можете настроить размер партии, если хотите, но это вопрос для другого потока: –

Смежные вопросы