何时在asp.net异步中配置db

时间:2015-10-09 06:10:46

标签: asynchronous repository dispose

我环顾四周,却找不到任何具体的内容。所以,我有一个异步存储库,过去看起来像:

public object get()
{
   var db = new entity(); //i am using EF6
   var listOfObjects = db.Object.ToList();
   db.Dispose();
   return listOfObjects;
}

但是现在我正在使用异步,我无法在那里使用dispose,因为它在前一个调用被解析之前就已经命中了。所以我以前的方法现在看起来像:

public async Task<Object> GetAsync()
{
   var db = new entity();
   return await db.Object.ToListAsync();
}

所以我的问题是,我现在应该何时或如何处置?

1 个答案:

答案 0 :(得分:1)

正如我们在讨论中所讨论的那样,可以在下面的堆栈链接上找到更多详细信息;

Entity Framework and Connection Pooling

克里斯托弗·哈里森还在微软虚拟学院的实体框架MVA视频中简要讨论过这个问题。

基本上,Entity Framework将根据上下文创建单个实体。引用链接,

  

任何需要具有相同键的实体的后续查询都会返回   这个存储的实例。如果数据存储中的值仍然改变了   从初始查询中接收具有值的实体。这就是所谓的   身份地图模式。您可以强制对象上下文重新加载   实体,但它将重新加载单个共享实例。