小编Var*_*azo的帖子

EntityFramework 6 AsNoTracking 和预测

给出以下代码:

A。

using (var context = new testEntities())
{
    context.tblAuthors.Select(p => new
    {
        Author_name = p.Author_name,
        Id = p.Id,
        country = p.country,
        tblBooks = p.tblBooks.Select(z => new
        {
            Id = z.Id,
            Auhthor_id = z.Auhthor_id,
            Edition = z.Edition,
            Price = z.Price
        }).ToList()
    }).ToList();

}
Run Code Online (Sandbox Code Playgroud)

B.

using (var context = new testEntities())
{   
    context.tblAuthors.Include(p => p.tblBooks).AsNoTracking().ToList();
}
Run Code Online (Sandbox Code Playgroud)

我在一个单独的循环中运行了 100 次迭代。第一个代码 (A) 的平均执行时间为 157 毫秒。第二个代码 (B) 的平均执行时间为 673 毫秒。

我的问题是:

1 - 为什么实体框架有这种差异?我认为 AsNoTracking() 应该与投影执行相同的操作,因为上下文在这两种情况下都没有跟踪实体。

2 - 如果我想获得最大性能,我应该对所有只读操作使用投影而不是 AsNoTracking() 吗?

更新 1:正在检索的数据量是相同的。我正在使用表格上的所有可用字段。实体框架生成的查询对于这两个代码是相同的。

entity-framework-6

6
推荐指数
0
解决办法
776
查看次数

标签 统计

entity-framework-6 ×1