禁用更改跟蹤和代理生成

如果你只想獲取資料,但不想修改任何內容,則可以關閉更改跟蹤和代理建立。這將提高你的效能並防止延遲載入。

不好的例子:

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
}