EntityFramework 6 AsNoTracking和投影

时间:2018-06-20 20:45:41

标签: entity-framework-6

给出以下代码:

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();

}

B。

using (var context = new testEntities())
{   
    context.tblAuthors.Include(p => p.tblBooks).AsNoTracking().ToList();
}

我在100个迭代的单独循环中都运行了这两个程序。第一个代码(A)给我平均157ms的执行时间。第二个代码(B)给我平均673ms的执行时间。

我的问题是:

1-为什么Entity Framework有此区别?我以为AsNoTracking()应该和Projection一样执行,因为在两种情况下Context都不跟踪实体。

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

更新1::正在检索的数据量是相同的。我正在使用表格上的所有可用字段。两种代码由Entity Framework生成的查询都是相同的。

0 个答案:

没有答案