プロジェクトで問題が発生しました。Fluent NHibernate と一緒に構造マップを備えた汎用リポジトリを使用しています。すべてがかなりうまく機能しますが、トランザクションとセッション管理に関しては、何をすべきかまったくわかりません。答えを探しましたが、自分のニーズに合ったものは本当に見つかりません。
私がアプリケーションで行っていることは、次のように、リクエストを受け取ったときに構造マップにリポジトリ クラスをインスタンス化させることです。
internal class RepositoryRegistry : Registry
{
public RepositoryRegistry()
{
For<IRepository<User>>().Use<Repository<User>>();
For<IRepository<Tasks>>().Use<Repository<Tasks>>();
}
}
internal class NHibernateRegistry : Registry
{
public NHibernateRegistry()
{
For<ISessionFactory>()
.Singleton()
.Use(() => new NHibernateSessionFactory().GetSessionFactory());
For<ISession>()
.Singleton()
.Use(x => x.GetInstance<ISessionFactory>().OpenSession());
}
}
public interface IRepository<T>
{
T GetById(int id);
void SaveOrUpdate(T entity);
IList<T> GetAll();
IQueryable<T> Linq();
void Add(T entity);
}
編集:必要なことを結論付けました。構造マップと一緒に作業単位パターンを使用したくありませんが、作業単位を介してアクセスできるある種のリポジトリ ラッパーも必要です。
ありがとう、ジェームズ・フォード