linq-to-sql - LINQ to SQL 实体身份缓存和编译查询错误的解决方法?

标签 linq-to-sql caching identity compiled

我在 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/

相关文章:

c# - Linq to SQL 数据库上下文管理

c# - Linq to sql parallel 用于提交更改

c# - 这个 LINQ 表达式是如何工作的?

Magento:自定义缓存的触发器在哪里?

python - id() 与 `is` 运算符。比较 `id` 是否安全?同样的 `id`是不是代表同一个对象?

sql - 获取标识列值

c# - 在没有身份验证的情况下创建项目时的 ASP.NET 身份集成

.net - 使用 LINQ 修复 'string or binary data would be truncated' 警告的任何巧妙方法

php - 使用 redis 驱动程序时如何更改 Laravel 4 的连接信息?

angularjs - ChangeState 后重置/卸载 Controller (调用注销)。 AngularJS