本当に、私の質問はタイトルにあります...セッションごとのリクエストのためにナンシーでNHibernateセッションをどのように処理する必要がありますか? それ自体に良い答えがある場合は、それを選択してください...さらに背景が必要な場合は、次のとおりです。
ASP.NET MVC で actionFilter を使用して、Web 要求の開始時と終了時に NHibernate コンテキストでセッションを開いたり閉じたりすることに慣れています。こうすることで、リクエストのコンテキスト内の各データベース操作で同じセッションが使用されます。
Nancy を使用する新しいプロジェクトで同じ種類のものをセットアップしたと思っていましたが、セッションが必要になるたびに新しいセッションが生成されます。ブートストラッパーでセッションの開始と終了を処理する方法は次のとおりです (StructureMapBootstrapper から継承):
protected override void RequestStartup(IContainer container, IPipelines pipelines, NancyContext context)
{
var sessionContainer = container.GetInstance<ISessionContainer>();
pipelines.BeforeRequest.AddItemToStartOfPipeline(x =>
{
sessionContainer.OpenSession();
return x.Response;
});
pipelines.AfterRequest.AddItemToEndOfPipeline(x => sessionContainer.CloseSession());
}
私のは、このサイトISessionContainer
に似たものに基づいています。私の実装では、NHibernate のセッション コンテキストを使用して「現在のセッション」を取得します。ISessionContainer
現在、Nancy プロジェクトでこれを試すと、ISessionContainer.Session
プロパティが要求されるたびに新しいセッションが返されます。Nancy では Cookie ベースのセッションがデフォルトで有効になっていないためだと考えたので、これをブートストラップに追加しました。
protected override void ApplicationStartup(IContainer container, IPipelines pipelines)
{
CookieBasedSessions.Enable(pipelines);
}
サイコロはありません。新しいセッションを依頼するたびに、今でも新しいセッションが与えられています。
しかし、本当に、私は自分の問題を診断したくありません。Nancy で NHibernate セッション管理を処理する標準的な方法を知りたいです。