【发布时间】:2009-09-15 14:42:35
【问题描述】:
我在 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));
有没有其他人遇到过这个问题并为此创建了解决方法?基于服务器的应用程序利用编译查询和身份缓存非常重要,所以我希望这是其他人以前解决过的问题!
【问题讨论】:
标签: linq-to-sql caching identity compiled