2

単一のセッションで作業しています。アプリケーションにはさまざまなモジュールが含まれており、セッションからフェッチされたオブジェクトは保持されます。セッションまたはエンティティを更新するために、任意のモジュールからSession.Clearを呼び出します。他のモジュールの子エンティティの取得で、「遅延初期化に失敗しました-セッションまたはセッションが閉じられていません」という例外が発生します。

[LazyInitializationException]ロールのコレクションを遅延初期化できませんでした:Application.Modules.Repository.childRepository、セッションまたはセッションが閉じられていません

これが私がSessionファクトリとSessionを作成する方法です:

var createdSessionFactory = Fluently.Configure(configuration)
                                          .Mappings(m => m.FluentMappings.AddFromAssemblyOf<DMProgram>())
                                          .ExposeConfiguration(c => c.SetProperty("command_timeout", "500"))
                                          .BuildSessionFactory();


ISession Session = NHibernateConfiguration.SessionFactory.OpenSession();
4

1 に答える 1

3

ケース:セッションからオブジェクト(A)を取得する場合。そのオブジェクトには、遅延ロードであるコレクション(B)があります。セッションを閉じるかクリアします。今、あなたはコレクション(B)を取得しようとしています。このエラーが発生することを確認してください。

原因:セッションが親オブジェクト(A)を認識していないため。

解決策:セッションを永続化する必要があります。そうしないと、収集を熱心に行うことができます(B)。

于 2012-11-27T08:18:05.420 に答える