1

我有一个使用 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();
    }

我错过了什么吗?或者我的方法没问题,我的存储库实现可能存在问题,导致它发生。

4

1 回答 1

1

好的,我发现了问题——似乎我的 Application_Start 代码被调用了不止一次,并且在某些情况下我使用了 Lazy——这导致了对 DB 上下文的空引用的保存。

谢谢你的帮助!

于 2013-04-06T19:19:45.893 回答