2013-07-31 1 views
0
public bool SaveValidTicketNos(string id,string[] ticketNos, string checkType, string checkMan) 
     { 
      bool result = false; 
      List<Carstartlistticket>enties=new List<Carstartlistticket>(); 
      using (var context = new MiniSysDataContext()) 
      { 
       try 
       { 
        foreach (var ticketNo in ticketNos) 
        { 
         Orderticket temp = context.Orderticket.ByTicketNo(ticketNo).SingleOrDefault(); 
         if (temp != null) 
         { 
          Ticketline ticketline= temp.Ticketline; 
          string currencyType = temp.CurrencyType; 
          float personAllowance=GetPersonCountAllowance(context,ticketline, currencyType); 
          Carstartlistticket carstartlistticket = new Carstartlistticket() 
                     { 
                      CsltId = Guid.NewGuid().ToString(), 
                      Carstartlist = new Carstartlist(){CslId = id}, 
                      LeaveDate = temp.LeaveDate, 
                      OnPointName = temp.OnpointName, 
                      OffPointName = temp.OffpointName, 
                      OutTicketMan = temp.OutBy, 
                      TicketNo = temp.TicketNo, 
                      ChekMan = checkMan, 
                      Type = string.IsNullOrEmpty(checkType)?(short?)null:Convert.ToInt16(checkType), 
                      CreatedOn = DateTime.Now, 
                      CreatedBy = checkMan, 
                      NumbserAllowance = personAllowance 
                     }; 
          enties.Add(carstartlistticket); 
         } 
        } 

        context.BeginTransaction(); 
        context.Carstartlistticket.InsertAllOnSubmit(enties); 
        context.SubmitChanges(); 
        bool changeStateResult=ChangeTicketState(context, ticketNos,checkMan); 
        if(changeStateResult) 
        { 
         context.CommitTransaction(); 
         result = true; 
        } 
        else 
        { 
         context.RollbackTransaction(); 
        } 
       } 
       catch (Exception e) 
       { 
        LogHelper.WriteLog(string.Format("CarstartlistService.SaveValidTicketNos({0},{1},{2},{3})",id,ticketNos,checkType,checkMan),e); 
        context.RollbackTransaction(); 
       } 
      } 
      return result; 
     } 

Мой код выше. Я сомневаюсь, что этот код имеет ужасную плохую производительность. Неэффективность в точкеКак улучшить производительность выражений Linq?

Orderticket temp = context.Orderticket.ByTicketNo(ticketNo).SingleOrDefault(); 

, на самом деле, я получил массив строк с помощью метода аргументов, то я хочу, чтобы получить все данные по ticketNos из базы данных, здесь я использовать цикл, я знаю, что если я пишу такой код может вызвать проблемы с производительностью, и это приведет к еще одному доступу к базе данных по времени, как можно избежать этой проблемы и повысить производительность кода, например, получить все данные только при доступе к данным базы данных. Я забыл сообщить вам ORM Я использую, еп, то ОРМ PlinqO основе NHibernate

я с нетерпением жду, имеющих каждый свой ответ, спасибо

ответ

0

с помощью простого NHibernate

var tickets = session.QueryOver<OrderTicket>() 
    .WhereRestrictionOn(x => x.TicketNo).IsIn(ticketNos) 
    .List(); 

short? type = null; 
short typeValue; 
if (!string.IsNullOrEmpty(checkType) && short.TryParse(checkType, out typeValue)) 
    type = typeValue; 

var entitiesToSave = tickets.Select(ticket => new Carstartlistticket 
{ 
    CsltId = Guid.NewGuid().ToString(), 
    Carstartlist = new Carstartlist() { CslId = id }, 
    LeaveDate = ticket.LeaveDate, 
    OnPointName = ticket.OnpointName, 
    OffPointName = ticket.OffpointName, 
    OutTicketMan = ticket.OutBy, 
    TicketNo = ticket.TicketNo, 
    ChekMan = checkMan, 
    CreatedOn = DateTime.Now, 
    CreatedBy = checkMan, 
    Type = type, 
    NumbserAllowance = GetPersonCountAllowance(context, ticket.Ticketline, ticket.CurrencyType) 
}); 

foreach (var entity in entitiesToSave) 
{ 
    session.Save(entity); 
} 

для усиления этого далее попытаться поджать все необходимые PersonCountAllowances

+0

спасибо вам anwser, вы даете мне другой поезд мысли – YangShuang

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

  • Нет связанных вопросов^_^