禁用更改跟踪和代理生成
如果你只想获取数据,但不想修改任何内容,则可以关闭更改跟踪和代理创建。这将提高你的性能并防止延迟加载。
不好的例子:
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
}