为什么当我更改参数时,实体框架缓存查询结果,我不配得到

时间:2019-01-11 18:13:20

标签: caching entity-framework-6

我有一个方法,可以返回产品折扣。

public List<OrderDiscount> GetItemDiscounts(string productId, string itemGroup, string resaleTypeIdNewPolicy, string resaleBusinessBranch)
{
    var exeptiondiscount = (from d in Context.Discounts
                            where d.OrderType == "SO"
                               && d.BusinessUnit == "SSP"
                               && d.Currency == "BRL"
                               && d.BusinessBranch == resaleBusinessBranch
                               && ((d.Description == "HGRITEM" && d.ProductId == productId && d.ResaleGroup == resaleTypeIdNewPolicy)
                                   || (d.UnitMeasure == "PC" && (d.Description == "HGRITEM" && d.ItemGroup == itemGroup && d.ResaleGroup == resaleTypeIdNewPolicy))
                                   || (d.UnitMeasure == "PC" && d.Description == "HGRCLI" && d.ResaleGroup == resaleTypeIdNewPolicy && d.ProductId == productId)
                                   || (d.UnitMeasure == "PC" && (d.Description == "HGRCLI" && d.ItemGroup == itemGroup && d.ResaleGroup == resaleTypeIdNewPolicy) || (d.Description == "HGRCLI" && d.ItemGroup == "" && d.ResaleGroup == resaleTypeIdNewPolicy && d.ProductId == "")) 
                           )
                           select d).ToList();

    return exeptiondiscount;
}   

第一次在循环中运行时,它会返回正确的结果行。

第二次更改了productId和itemGroup参数,但结果未更改。

如果我在数据库中运行两个查询,结果将有所不同。

我不知道为什么实体框架缓存这些结果。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。

只需在.ToList()之前添加“ .AsNoTracking()”。

这将导致实体不缓存查询。