NHを使用して、いくつかのプロパティとリスト<Attachments>
添付ファイル(インスタンスがlcocation
の1対多リレーション)を持つlocation
というオブジェクトにDBをマップしています。は、n-tier Webアプリケーションで遅延ロードを実行できません
{"Initializing[Location#543c7367-08fa-4469-a252-8e2c6163be22]-failed
いい加減に初期化するために:私は
location.attachments
コレクションにアクセスが、例外を取得しようとするコード内のいくつかの後の時点でpublic IList<T> GetAllByExpression(Expression<Func<T,bool>> expression) { using (ISession session = NHibernateHelper.OpenSession()) { return session.Query<T>().Where(expression).ToList(); } }
:
私は
location
istanceを初期化するためにラムダ式を使用しますロールのコレクション:Location.Attachments、no セッションまたはセッションが閉じられました "}
私はセッションが閉じていることを理解していますが、あまりできません。
私はセッションが閉じていることを理解していますが、私ができることはあまりありません。
私はジレンマを持っています: 1)コードはDBからフェッチした後にコレクションを使用し、セッションをまだ開いておく必要があります。 セッションを開いたままにするのは悪い習慣です。 (using
なし)。
2)アプリケーション実行時にセッションを開いたままにしても、n層のWebアプリケーションを構築しています。 DALは一般的であり、実装のセッション(この場合はNH)を公開しないでください。
3)熱心な読み込みが解決策だと思われますが、それは無駄です。他のオブジェクトのリストを持つオブジェクトの場合は、すべてのデータを熱心に読み込む必要があります。 (それは繰り返しても続くことがあります)
どうすればよいですか?あなたは、セッションを閉じたか、あなたはその1とは別のセッションでコレクションをロードしようとされた後、コレクションをロードしようとしているように見えます
:上
TIA
私はセッションを永遠に開くことができませんか? –
@Elad Benda:あなたはしないでください。セッションは、単一の作業単位のために短命でなければなりません。 – jason
私はORMからLocationオブジェクトを初期化し、後でその中の 'attachments'コレクションに対処しなければなりませんでした(1対多の関係)。これどうやってするの? –