优化实体框架(gridview中每个模型的多个查询)

时间:2018-05-01 13:05:35

标签: c# .net winforms entity-framework entity-framework-6

我正在使用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(),这是尝试通过在线搜索进行优化。

0 个答案:

没有答案