私のアプリでは、特定のユーザーに対して、ユーザーに属するオブジェクトのインスタンスごとに「設定」を取得できるように、3進辞書マッピングを設定しました。私はBaz
オブジェクトを持っている時はいつでもそう、私はcurrentUser.BazSettings[baz]
を経由して、現在のユーザーのバズの設定を検索することができますステートレスセッションを使用した辞書値のレイジールックアップ
public class User
{
public virtual IDictionary<Baz, BazSettings> BazSettings { get; set; }
//...
:それは私のようなものを持っている、です。
私はこれを行うにはステートレスセッションを使用できるようにしたいと思いますが、私はこのコードで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エラーメッセージには、「no session or session was closed」というテキストが含まれています。ステートレスセッションを使用する場合、エンティティはセッションに接続されていないため、これは理にかなっています。しかし、私はこのルックアップを実行するためにステートレスセッションを使用する方法があると思います。
ステートレスセッションを使用して検索を実行するにはcurrentUser.BazSettings[baz]
?
私はデータベースからデータを読み込みたいので、ステートレスセッションを使いたいです。私がやったことは、ステートレスセッションでHQLクエリを使うことでした。それはうまくいくようです。 –
ステートフルセッションは、単なる文章のためのものではありません。レイジーローディングとキャッシングは、それらによって提供される2つの重要な機能です。 –