私のアプリでは、特定のユーザーについて、そのユーザーに属するオブジェクトの各インスタンスの「設定」を取得できるように、3項辞書マッピングを設定しました。つまり、私は次のようなものを持っています:
public class User
{
public virtual IDictionary<Baz, BazSettings> BazSettings { get; set; }
//...
したがって、Baz
オブジェクトがあるときはいつでも、を介して現在のユーザーのbaz設定を検索できますcurrentUser.BazSettings[baz]
。
ステートレスセッションを使用してこれを実行できるようにしたいのですが、次のLazyInitializationException
コードでを取得します。
//int bazId;
using (IStatelessSession session = Global.SessionFactory.OpenStatelessSession())
{
var currentUser = session.Get<User>(Membership.GetUser().ProviderUserKey);
var baz = session.Get<Baz>(bazId);
var bazSettings = currentUser.BazSettings[baz]; // raises `LazyInitializationException`
代わりにを使用するISession
と、問題は解決します。
完全なNHibernateエラーメッセージには、「セッションまたはセッションが閉じられていません」というテキストが含まれています。ステートレスセッションを使用する場合、エンティティはセッションに接続されないため、これは理にかなっています。ただし、ステートレスセッションを使用してこのルックアップを実行する方法があると思います。
ステートレスセッションを使用してルックアップを実行するにはどうすればよいcurrentUser.BazSettings[baz]
ですか?