Entity framework 4 使用Unity时Azure Worker角色中的DbContext错误

Entity framework 4 使用Unity时Azure Worker角色中的DbContext错误,entity-framework-4,azure,ef-code-first,unity-container,azure-worker-roles,Entity Framework 4,Azure,Ef Code First,Unity Container,Azure Worker Roles,我有一个Azure worker角色,其UnitOfWork类如下所示: public class UnitOfWork : IUnitOfWork { public MyData Db { get; private set; } public ILoginRepository LoginRepository { get; private set; } public ISubscriptionRepository SubscriptionRepository { get

我有一个Azure worker角色,其UnitOfWork类如下所示:

public class UnitOfWork : IUnitOfWork
{
    public MyData Db { get; private set; }

    public ILoginRepository LoginRepository { get; private set; }
    public ISubscriptionRepository SubscriptionRepository { get; private set; }

    public UnitOfWork(MyData db,
        ILoginRepository loginRepository,
        ISubscriptionRepository subscriptionRepository)
    {
    }
}
存储库也接受对DbContext的引用:

public class LoginRepository : Repository<Login>, ILoginRepository
{
    public LoginRepository(MyData db) : base(db) { }
}
我觉得这很直截了当

现在,我想在Unity中首先配置代码DbContext,这样每次解析UnitOfWork时,都会创建一个新的DbContext,所有随后解析的存储库也会得到它

我认为PerResolveLifetimeManager会做到这一点:

container.RegisterType<IUnitOfWork, UnitOfWork>();
container.RegisterType<MyData, MyData>(new PerResolveLifetimeManager());
但事实并非如此。我遇到了所有这些奇怪的SQL相关错误,例如:

不允许新事务,因为会话中正在运行其他线程


给出了什么?

您谈论的是PerResolveLifetimeManager,但您使用的是PerThreadLifetimeManager,据说在您的代码中存在缺陷。这可能是您的问题的原因吗?

好的,我重构了解决方案,以执行更显式的解析调用,而不是.actor注入,然后我意识到主要问题是在迭代包含对象的IQueryable时尝试更新对象

在我看来,无事生非


感谢您的帮助。

您能否发布一个示例,说明如何从worker角色调用存储库?注意:UnitOfWork被注入WorkerRole分派到的ICommand对象中。在ICommand实例中,它如下所示:UnitOfWork.LoginRepository.DoSomething;工作单位。承诺;好的,当我看到这个问题的标题时,我有了希望。但是你回答了这个问题,这对我没有帮助。我已经发布了我的问题