0

我有一个带有 UnitOfWork 类的 Azure 工作者角色,看起来像这样:

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 相关的错误,例如:

“不允许新事务,因为会话中还有其他线程在运行。”

是什么赋予了?

4

2 回答 2

0

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

在我看来,无事生非。

谢谢您的帮助。

于 2012-06-22T19:33:04.537 回答
0

您正在谈论PerResolveLifetimeManager但您PerThreadLifetimeManager在代码中使用(据说无论如何都是错误的)。这可能是你问题的原因吗?

于 2012-06-22T06:06:37.680 回答