扩展方法无法正常工作

时间:2014-04-22 08:11:17

标签: asp.net-mvc c#-4.0 entity-framework-4

我的应用程序遇到了一些有线问题。当我进行调试并检查这些值是否正确更新时。但是如果它运行时没有调试值不能正确更新。如何摆脱这个问题。

这是我的静态扩展方法。

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;
        }

在上述方法之后,数据库保存值是错误的。但是当我对上面的扩展方法进行调试并检查它是否正常工作时。问题是什么?有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

您的扩展方法会返回Decimal,但您不会将此内容分配给任何内容......

bookingProcessModel.Invoice.CalculateTotal(); 

...只返回Decimal值,所以你看到的是正确的行为。

我认为您不需要Extension method,您可以在Invoice课程中将CalculateTotal上的方法设为Invoice

类似的东西:

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

CalculateTotal将返回一个包含计算值的新发票。

如果您想坚持使用扩展方法,则需要指定返回值。