2014-04-22 191 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