我有一个ASP.NET MVC应用程序,它使用EF来处理数据库。我使用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();
}
我错过了什么吗?或者我的approch没问题,我的Repository实现可能存在问题,这使得它成为现实。
答案 0 :(得分:1)
好的,我发现了问题 - 似乎我的Application_Start代码被多次调用,并且在某些情况下我使用了Lazy - 这导致了对DB上下文的空引用的保存。
感谢您的帮助!