最初の NHibernate プロジェクトは順調に進んでいます。ただし、シナリオでセッションとオブジェクトを管理する方法の全体像はまだ把握していません。
そのため、NHibernate を使用してデータベースに格納された永続オブジェクト モデルでシステム構造を構成しています。
システムは、アプリケーションがサービス プロセスで監視している物理デバイスで構成されます。そのため、サービスの起動時に、サービスで Device オブジェクトをインスタンス化し、デバイス インターフェイスから読み取ったデータに従ってステータスを更新します。オブジェクト モデルは、サービスの有効期間中存続します。
このサービスは、オブジェクト データを表示し、一部のオブジェクトを操作することもできる Silverlight クライアントにもサービスを提供しています。ただし、サービスが監視に使用しているのと同じオブジェクトにアクセスする必要があります。たとえば、オブジェクトには永続化されていないメモリ内データも含まれているためです。(はい、実際にデータをクライアントに転送するために DTO オブジェクトを使用しています。)
このサービスはマルチスレッド システムであるため、問題は NHibernate セッションをどのように管理するかです。
私は現在、NHibernate セッションに直接アクセスする代わりに、バックグラウンドでオブジェクトの永続性を処理するバックグラウンド スレッドを用意し、他のスレッドは "SaveRequests" をリポジトリに配置するというアプローチを検討しています。これにより、サービスに単一のセッションを使用して、オブジェクトにアクセスするサービスおよびクライアントから完全に分離された NHibernate レイヤーを管理できます。
誰もがリクエストごとのセッションモデルまたはいくつかのバリエーションを提案しているため、そのようなセットアップに関するドキュメントは見つかりませんでした。しかし、あるセッションでオブジェクトをインスタンス化して別のセッションに保存すると、それは同じオブジェクトではなく、NHibernate がデータベースに新しいエントリを作成するようにも見えます。
また、このようなコンテキストでの IOC コンテナの役割を理解しようとしましたが、実際に役立つことを示す有用な例は見つかりませんでした。
私は正しい軌道に乗っていますか、それともどのように進めるべきですか?