何时在 asp.net 异步中处理数据库
when to dispose db in asp.net async
我环顾四周,但找不到任何特定于此的内容。所以,我有一个异步存储库,它曾经看起来像:
public object get()
{
var db = new entity(); //i am using EF6
var listOfObjects = db.Object.ToList();
db.Dispose();
return listOfObjects;
}
但现在我正在使用异步,我无法在那里进行处理,因为它在上一个调用被解析之前就命中了它。所以我以前的方法现在看起来像:
public async Task<Object> GetAsync()
{
var db = new entity();
return await db.Object.ToListAsync();
}
所以我的问题是,我现在应该什么时候或如何处置?
正如我们在讨论中所谈到的,更多细节可以在下面的堆栈 link 中找到;
Entity Framework and Connection Pooling
Christopher Harrison 在微软虚拟学院的 Entity Framework MVA 视频中也简要谈到了这一点。
基本上,Entity Framework 将为每个上下文创建一个实体。引用 link,
Any subsequent query which requires entity with the same key returns
this stored instance. If values in the data store changed you still
receive the entity with values from the initial query. This is called
Identity map pattern. You can force the object context to reload the
entity but it will reload a single shared instance.
我环顾四周,但找不到任何特定于此的内容。所以,我有一个异步存储库,它曾经看起来像:
public object get()
{
var db = new entity(); //i am using EF6
var listOfObjects = db.Object.ToList();
db.Dispose();
return listOfObjects;
}
但现在我正在使用异步,我无法在那里进行处理,因为它在上一个调用被解析之前就命中了它。所以我以前的方法现在看起来像:
public async Task<Object> GetAsync()
{
var db = new entity();
return await db.Object.ToListAsync();
}
所以我的问题是,我现在应该什么时候或如何处置?
正如我们在讨论中所谈到的,更多细节可以在下面的堆栈 link 中找到;
Entity Framework and Connection Pooling
Christopher Harrison 在微软虚拟学院的 Entity Framework MVA 视频中也简要谈到了这一点。
基本上,Entity Framework 将为每个上下文创建一个实体。引用 link,
Any subsequent query which requires entity with the same key returns this stored instance. If values in the data store changed you still receive the entity with values from the initial query. This is called Identity map pattern. You can force the object context to reload the entity but it will reload a single shared instance.