【发布时间】:2013-06-28 14:39:44
【问题描述】:
我有一个 MVC4 Web 项目,并使用 Castle Windsor 作为我的 DI 容器。另外,我正在使用实体框架来访问 SQL 数据库。我想将我的 Lifestyle 设置为 PerWebRequest,但是,当我这样做时,我收到以下错误:“操作无法完成,因为 DbContext 已被释放”。
如果我使用 Transient 生活方式,则可以绕过该错误,但它会在 Entity Framework 中引入一组新问题。如何保持 PerWebRequest 的生活方式,但在调用 dispose 方法时正确?
我正在使用构造函数注入向我的存储库传递一个连接字符串来构建一个新的上下文。我也实现了 IDisposable。见下文:
public class MySqlRepository : MyRepository, IDisposable
{
private readonly DbContext _context;
public MySqlRepository(string connectionString)
{
_context = new DbContext(connectionString);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
_context.Dispose();
}
}
public void Dispose()
{
Dispose(true);
}
}
【问题讨论】:
-
代码似乎是正确的。您确定使用 SqlRepository 的组件也有 PerWebReuquest 或更短的生活方式吗?
标签: asp.net-mvc-4 dependency-injection entity-framework-5 castle-windsor idisposable