一定のトランザクションを含む要求ごとのStructureMap / NHibernateセッション
-
08-07-2019 - |
質問
MVCアプリでStructureMapを使い始めたところ、 ITranscation
を正しい方法で処理することを除いて、すべて正常に動作します。
やりたいことは、リクエストごとに新しいISessionを作成することです。これと一緒に、取引を開始したい。
リクエストの終わりに、トランザクションをコミットします。
私の質問は、StructureMapでこれをどのように行うのが最善かということです。 Googleで多くの例を見つけましたが、リクエストでトランザクションを開始するものはありません。メソッドでこれを実行したくありません。
事前に感謝します!
他のヒント
おそらくそれほど簡単ではありませんが、ここに私の見解を示します。基本的にセッションとトランザクションをラップする作業単位を作成し、それをリクエストのために保存し、リクエストが終了したときにコミットまたはロールバックします。
public interface IUnitOfWork : IDisposable
{
ISession Session { get; }
void Commit();
void Rollback();
}
実装は次のようになります。
public class UnitOfWork : IUnitOfWork
{
private readonly ITransaction _tx;
public ISessionFactory SessionFactory { get; set; }
public UnitOfWork()
{
SessionFactory = ObjectFactory.GetNamedInstance<ISessionFactory>(Keys.SessionFactoryName);
Session = SessionFactory.OpenSession();
_tx = Session.BeginTransaction();
}
public UnitOfWork(ISessionFactory sessionFactory)
{
SessionFactory = sessionFactory;
Session = SessionFactory.OpenSession();
_tx = Session.BeginTransaction();
}
public ISession Session { get; private set; }
public void Commit()
{
if (_tx.IsActive)
_tx.Commit();
}
public void Rollback()
{
_tx.Rollback();
}
}
終了リクエストで作業ユニットを破棄するだけです。
所属していません StackOverflow