【发布时间】:2012-06-22 04:33:26
【问题描述】:
我有一个 Azure 工作者角色,它的 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 相关错误,例如:
“不允许新事务,因为会话中还有其他线程在运行。”
什么给了?
【问题讨论】:
-
您能否发布一个示例,说明您如何从工作角色调用存储库?
-
注意:UnitOfWork 被注入到由 WorkerRole 分派的 ICommand 对象中。在 ICommand 实例中,它看起来像这样: UnitOfWork.LoginRepository.DoSomething(); UnitOfWork.Commit();
标签: entity-framework-4 azure ef-code-first unity-container azure-worker-roles