禁用更改跟踪和代理生成

如果你只想获取数据,但不想修改任何内容,则可以关闭更改跟踪和代理创建。这将提高你的性能并防止延迟加载。

不好的例子:

using(var context = new Context())
{
    return await context.Set<MyEntity>().ToListAsync().ConfigureAwait(false);
}

好例子:

using(var context = new Context())
{
    context.Configuration.AutoDetectChangesEnabled = false;
    context.Configuration.ProxyCreationEnabled = false;

    return await context.Set<MyEntity>().ToListAsync().ConfigureAwait(false);
}

在上下文的构造函数中关闭它们是特别常见的,特别是如果你希望在解决方案中设置它们:

public class MyContext : DbContext
{
    public MyContext()
        : base("MyContext")
    {
        Configuration.AutoDetectChangesEnabled = false;
        Configuration.ProxyCreationEnabled = false;
    }

    //snip
}