次のような 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) { }
}
これはかなり簡単だと思います。
ここで、UnitOfWork が解決されるたびに新しい DbContext が作成され、その後解決されるすべてのリポジトリもそれを取得するように、Unity でコード ファーストの DbContext を構成したいと思います。
PerResolveLifetimeManager がうまくいくと思います:
container.RegisterType<IUnitOfWork, UnitOfWork>();
container.RegisterType<MyData, MyData>(new PerResolveLifetimeManager());
しかし、そうではありません。次のような奇妙な SQL 関連のエラーがすべて表示されます。
「セッションで他のスレッドが実行されているため、新しいトランザクションは許可されません。」
何を与える?