我在ASP.NET MVC应用程序中的Service类中使用的当前检索模式大致如下:
public Client Get(int id)
{
using (var repo = _repoFactory.Get<Client>())
{
return repo.Get(id);
}
}
_repoFactory.Get<T>()
返回一个仓库(repository),当它被释放时,也会释放Entity Framework的DbContext
。
然而,当Get(int id)
方法的调用者需要使用Client
对象上的导航属性时,因为上下文已经被释放,所以会抛出异常。我可以想到几种解决这个问题的方法:
- 在服务之外不使用导航属性
- 不使用延迟加载的导航属性
- 找到其他方式在请求结束时处理上下文的释放
LifetimePerHttpRequest()
)。 - Alex