我正在使用WinForms中的应用程序。我的数据存储在MSSQL服务器(Azure)中。我的部分应用程序包括一些基本的计费功能。我有一个型号是发票,但我遇到了相当严重的性能问题。我的第一个问题是,谁应该受到指责?我的优化代码或底层实体框架。当我在DataGridView中显示发票列表时,主要问题就出现了。对于我列出的每张发票,我需要多次调用DBContext。这是不可思议的吗?出于这个原因,我需要多次打电话;一个获取要显示的发票列表(基于FK CustomerID),然后对于每个Invoice模型,我调用一些计算SubTotal,TaxTotal等等的方法。这些函数在下面。
public decimal SubTotal()
{
decimal subtotal = 0;
List<Billing_InvoiceItems> LineItems = db.Billing_InvoiceItems.Where(a => a.InvoiceID == this.id).AsNoTracking().ToList();
{
foreach (var LineItem in LineItems)
subtotal += (LineItem.Cost * LineItem.Quantity);
}
return subtotal;
}
public decimal TaxTotal()
{
decimal taxtotal = 0;
List<Billing_InvoiceItems> LineItems = db.Billing_InvoiceItems.Where(a => a.InvoiceID == this.id).AsNoTracking().ToList();
foreach (var LineItem in LineItems)
{
if (LineItem.Taxable)
{
taxtotal += LineItem.Cost * (decimal) LineItem.TaxPercentage;
}
}
return taxtotal;
}
public decimal Total()
{
return (this.SubTotal() + this.TaxTotal());
}
public decimal TotalDue()
{
return (this.Total() - this.TotalPaid());
}
public decimal TotalPaid()
{
List<Billing_PaymentToInvoice> paymentsToInvoice = db.Billing_PaymentToInvoice.Where(a => a.InvoiceID == this.id).ToList();
decimal totalpaid = 0;
foreach (var Payment in paymentsToInvoice)
{
totalpaid += (decimal)Payment.AmountApplied;
}
return totalpaid;
}
因为需要制作多个SQL&#34;查询&#34;我是不合理的。我列出的每张发票?或者有什么方法可以优化这些功能?我已经尝试了一种方法来缓存发票项目(允许我计算显示给用户的总数)但是,这要求我有一个看似经常调用的功能,以使缓存保持最新。
编辑:你会在LineItems查询中看到.AsNoTracking(),这是尝试通过在线搜索进行优化。