Pull class id in order entry from quote line

we use Actions/Quote/CreateSaleOrder to create a new sale order. Sometimes, our sales need change Part Class which would be different from its Part Class in Part Master, So, I want to pull Part Class for each order line from each quote line.
I use method Erp.Quote.CreateOrder Pre-processing. save quote number and quote line in callContextBpmData, then use Post-processing to update line information in order.
Here is Pre-processing code:

var ttQuoteHedResults = (from ttQuoteHedRow in ttQuoteHed
                 where ttQuoteHedRow.Company == Session.CompanyID
                && (ttQuoteHedRow.RowMod == "U" )
                select ttQuoteHedRow).FirstOrDefault();
        if (ttQuoteHedResults != null)
         callContextBpmData.Number01 = ttQuoteHedResults.QuoteNum;

var ttQuoteDtlResults = (from ttQuoteDtlRow in ttQuoteDtl
                    where ttQuoteDtlRow.Company ==Session.CompanyID
                   && (ttQuoteDtlRow.RowMod == "U")
                   select ttQuoteDtlRow).FirstOrDefault();
             if (ttQuoteDtlResults != null)
                       callContextBpmData.Number02 = ttQuoteDtlResults.QuoteLine;
                       callContextBpmData.ShortChar01 = ttQuoteDtlResults["ShortChar02"].ToString();
                       callContextBpmData.ShortChar02 = ttQuoteHedResults["ShortChar10"].ToString();

No error happened. Then here is post-processing code:

using(var txscope = IceDataContext.CreateDefaultTransactionScope())
if (callContextBpmData.Number02 != 0 && callContextBpmData.Number01 !=0)
         var QuoteDtlResults = (from QuoteDtlRow in Db.QuoteDtl
                                where QuoteDtlRow.Company == Session.CompanyID
                                 && QuoteDtlRow.QuoteNum == callContextBpmData.Number01
                                 && QuoteDtlRow.QuoteLine == callContextBpmData.Number02
                                 select QuoteDtlRow).FirstOrDefault();
            if ( QuoteDtlResults != null)
                     foreach(var OrderHed in (from OrderHedRow in Db.OrderHed
                                                   where OrderHedRow.Company == Session.CompanyID
                                                  && OrderHedRow.OrderNum == orderNum
                                                 select OrderHedRow))
                               var OrderDtl = (from OrderDtlRow in Db.OrderDtl
                                                     where OrderDtlRow.Company == Session.CompanyID
                                                     && OrderDtlRow.OrderNum == OrderHed.OrderNum
                                                     && OrderDtlRow.OrderLine == QuoteDtlResults.QuoteLine
                                                    select OrderDtlRow).FirstOrDefault();
                              if (OrderDtl != null)
	                        	OrderDtl["ShortChar01"] = callContextBpmData.ShortChar01;
	                        	OrderHed["ShortChar10"] = callContextBpmData.ShortChar02;
		                        callContextBpmData.Number01 = 0;
                                            callContextBpmData.Number02 =0;

No error happened either.

But Problem is my code only can update first line part class when create sale order from quote. the second line and third line in new order, the part class are empty. But If I change any other field in 2nd line like ship by date, then save it, the part class will be updated from quote line automatically.

How can I update all lines in one time? The goal is when user create new sale order from quote, if there are three lines in quote, then all new three lines in order can update part class information line to line. the Part class fields in Order and Quote both are UD fields.
Or is there any other way that I can get my goal?