2014-04-22 240 views
0

我的應用程序有一些有線問題。當我把一個調試並檢查這些值正確更新。但如果它運行沒有調試,值不能正確更新。如何擺脫此問題。擴展方法無法正常工作

這是我的靜態擴展方法。

public static decimal CalculateTotal(this Invoice invoice) 
     { 
      var subTotal = invoice.SubTotal; 
      var total = subTotal; 

      if (invoice.Fees == null || !invoice.Fees.Any()) return Math.Round(total, 2); 

      foreach (var fee in invoice.Fees.Where(f => !f.IsCancelled).OrderBy(f => f.Precedence)) 
      { 
       var value = 0m; 

       if (fee.Percentage.HasValue) 
       { 
        if (fee.Total != null) value += fee.Total.Value; 
       } 

       if (fee.Fixed.HasValue) 
       { 
        value += fee.Fixed.Value; 
       } 

       total += value; 
      } 

      return Math.Round(total, 2); 
     } 

上面的方法調用如下。

public InvoiceDetail Booking(my parameters) 
     { 

      var bookingProcessModel = BookingProcessDetails(providerKey, ownerKey, serviceId, petKeys, selectedDates, selectedTimes, selectedExtraServices, selectedResourceId, userType, discount, specialPrices, isProviderPickUp); 


      bookingProcessModel.Invoice.CalculateTotal();//here I'm calling that method 

      Catalog.SaveChanges();//data base save 

      var invoiceDetailModel = GetInvoiceDetailModel(bookingProcessModel.AppointmentModel, bookingProcessModel.Invoice); 

      return invoiceDetailModel; 
     } 

上述方法,數據的基礎上節約值之後是wrong.But當我把一個調試上面的擴展方法,檢查它的工作properly.What是問題?任何幫助?

+0

在調試模式下 - Catalog.SaveChanges()更新值是否符合您的期望? – swapneel

+0

@swapneel如果我對'bookingProcessModel.Invoice.CalculateTotal()'進行調試,那麼它的工作正常。 :(否則不是。 – Sampath

回答

0

你的擴展方法返回一個Decimal,但你沒有任何東西分配這個...

bookingProcessModel.Invoice.CalculateTotal(); 

...只返回一個值Decimal,所以你看到的是正確的行爲。

我不認爲你需要的一個Extension method,你可以簡單地在你的發票類的方法來CalculateTotalInvoice你傳遞

喜歡的東西:

var calculatedInvoice = Invoice.CalculateTotal(bookingProcessModel.Invoice); 

CalculateTotal將返回計算值的新發票。

如果你想堅持擴展方法,你將需要分配返回值。

+0

不是。那不是問題,因此所有的屬性都是引用類型。如果你的參數是正確的,那麼當我對擴展方法進行調試時,它怎麼能正確更新?問題可能在某處其他?你有什麼線索?:( – Sampath