我环顾四周,却找不到任何具体的内容。所以,我有一个异步存储库,过去看起来像:
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();
}
所以我的问题是,我现在应该何时或如何处置?
答案 0 :(得分:1)
正如我们在讨论中所讨论的那样,可以在下面的堆栈链接上找到更多详细信息;
Entity Framework and Connection Pooling
克里斯托弗·哈里森还在微软虚拟学院的实体框架MVA视频中简要讨论过这个问题。基本上,Entity Framework将根据上下文创建单个实体。引用链接,
任何需要具有相同键的实体的后续查询都会返回 这个存储的实例。如果数据存储中的值仍然改变了 从初始查询中接收具有值的实体。这就是所谓的 身份地图模式。您可以强制对象上下文重新加载 实体,但它将重新加载单个共享实例。