我有一个使用 EF 处理 DB 的 ASP.NET MVC 应用程序。我使用 DDD 作为架构,并获得了存储库和服务模式。
我正在尝试将 StructureMap 用于 DI,但由于某种原因,我的数据库在第一次请求后被处理掉了。
编辑:我得到的错误是
操作无法完成,因为 DbContext 已被释放。
似乎我在存储库中得到它,例如:
public class AccountRepository : Repository<Account>, IAccountRepository
{
public AccountRepository(MyDbContext context) : base(context) { }
public Account FindAccountByEmailAddress(string emailAddress, bool loadRelatedRoles = false)
{
IQueryable<Account> query = (from a in Entity
where a.LoweredEmailAddress == emailAddress.ToLower()
select a);
if (loadRelatedRoles)
{
return query.Include(a => a.Roles).FirstOrDefault();
}
return query.FirstOrDefault();
}
}
在 Application_BeginRequest 我正在使用注册数据库
ObjectFactory.Configure(x =>
{
x.For(typeof(MyDbContext))
.HttpContextScoped();
});
为了将其保留为每个请求的一个实例。
在 Application_EndRequest 我使用以下方式发布请求:
protected void Application_EndRequest(object sender, EventArgs e)
{
StructureMap.ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}
我错过了什么吗?或者我的方法没问题,我的存储库实现可能存在问题,导致它发生。