Entity framework 4 使用Unity时Azure Worker角色中的DbContext错误
我有一个Azure worker角色,其UnitOfWork类如下所示: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
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;工作单位。承诺;好的,当我看到这个问题的标题时,我有了希望。但是你回答了这个问题,这对我没有帮助。我已经发布了我的问题