我在 linq to sql 中遇到了一个 bug,其中在编译查询中执行主键查询时,身份缓存不起作用。
我编写了以下示例来演示身份缓存的用法。它只在第一次命中数据库时执行一次对数据库的调用,之后每次都从数据上下文的缓存中检索客户实体。
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));
有没有其他人遇到过这个问题并为其创建了解决方法?对于基于服务器的应用程序来说,利用编译查询和身份缓存非常重要,所以我希望这是其他人以前解决过的问题!
最佳答案
看起来像一个错误 - 这方面有一个数字。
作为一种变通方法,我不会为这样一个小/简单的操作创建一个编译查询——编译查询的真正好处是对于需要大量时间处理成 TSQL 的大型查询。
更新:这是一个错误,已解决,但无法修复。
关于linq-to-sql - LINQ to SQL 实体身份缓存和编译查询错误的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1427624/