Asp.net mvc StructureMap、ASP.NET和实体框架DbContext dispose

Asp.net mvc StructureMap、ASP.NET和实体框架DbContext dispose,asp.net-mvc,entity-framework,structuremap,Asp.net Mvc,Entity Framework,Structuremap,我得到了一个ASP.NETMVC应用程序,它使用EF来处理DB。我使用DDD作为体系结构,并获得了存储库和服务模式 我正在尝试对DI使用StructureMap,但由于某种原因,在第一次请求之后,我的DB被释放了 编辑:我得到的错误是 无法完成该操作,因为DbContext已被删除 处置 我似乎在存储库中获得了它,例如: public class AccountRepository : Repository<Account>, IAccountRepository { pub

我得到了一个ASP.NETMVC应用程序,它使用EF来处理DB。我使用DDD作为体系结构,并获得了存储库和服务模式

我正在尝试对DI使用StructureMap,但由于某种原因,在第一次请求之后,我的DB被释放了

编辑:我得到的错误是

无法完成该操作,因为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();
    }
}
以便将其保留为每个请求的一个实例

在应用程序_EndRequest中,我使用以下命令释放请求:

    protected void Application_EndRequest(object sender, EventArgs e)
    {
        StructureMap.ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
    }

我错过什么了吗?或者我的方法还可以,但可能是我的存储库实现出现了问题。

好吧,我发现了一个问题——我的应用程序启动代码似乎被调用了不止一次,而且在某些情况下我使用了Lazy——这导致了将空引用保存到DB上下文


谢谢你的帮助

好的,我发现了一个问题——我的应用程序启动代码似乎被调用了不止一次,而且我在某些情况下使用了Lazy——导致将null引用保存到数据库上下文


谢谢你的帮助

这是每次都发生还是仅当
loadRelatedRoles
为true时才会发生?这里我要做的是检查“角色”是否是延迟添加的,并且您稍后尝试获取它们(在处理上下文之后)。您还可以显示存储库(注入和)使用的控制器代码吗?我可能错了,但不是所有请求都会抛出开始和结束请求吗?i、 每一个css文件或图像,可能是你在不必要地处理对象吗?关于你的第一个问题-我确实使用了Lazy,但我已经删除了它进行测试,错误仍然出现。在按照您的评论进行进一步诊断之后-我注意到我遇到了这个问题,因为我正在连接应用程序启动和应用程序验证后测试中的DB,它似乎使用不同的HttpContext.About.css和.js等。您说得对-但我正在通过在路径上应用正则表达式来过滤它们,并确定我是否应该解决此请求。相关:这是每次都发生还是仅当
loadRelatedRoles
为true时发生?这里我要做的是检查“角色”是否是延迟添加的,并且您稍后尝试获取它们(在处理上下文之后)。您还可以显示存储库(注入和)使用的控制器代码吗?我可能错了,但不是所有请求都会抛出开始和结束请求吗?i、 每一个css文件或图像,可能是你在不必要地处理对象吗?关于你的第一个问题-我确实使用了Lazy,但我已经删除了它进行测试,错误仍然出现。在按照您的评论进行进一步诊断之后-我注意到我遇到了这个问题,因为我正在连接应用程序启动和应用程序验证后测试中的DB,它似乎使用不同的HttpContext.About.css和.js等。您说得对-但我正在通过在路径上应用正则表达式来过滤它们,并确定我是否应解决此请求。相关:
    protected void Application_EndRequest(object sender, EventArgs e)
    {
        StructureMap.ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
    }