我遇到了 linq to sql 中的一个错误,其中在编译查询中执行主键查询时身份缓存不起作用。
我编写了以下示例来演示身份缓存的用法。它只在第一次命中时对数据库执行一次调用,之后每次都从数据上下文的缓存中检索客户实体。
for(int i=0; i<10; i++)
{
DataContext.GetTable<Customer>().Single(c=>c.Id == 1);
}
不幸的是,当我将上述示例转换为已编译查询时,它无法利用身份缓存,实际上对数据库执行了 10 次调用。
for(int i=0; i<10; i++)
{
RetrieveCustomer(DataContext, 1);
}
private static readonly Func<DataContext, int, Customer> RetrieveCustomer =
CompiledQuery.Compile((DataContext context, int id) => context.GetTable<Customer>().Single(c=>c.Id == id));
有没有其他人遇到过这个问题并为此创建了解决方法?对于基于服务器的应用程序来说,利用编译查询和身份缓存非常重要,所以我希望这是其他人以前解决过的问题!