1

NHibernate で奇妙なエラーが発生しました。ISession がスレッド間で共有されているというエラーが発生していましたが、次のような独自の ADO.NET 接続を提供することでこれを解決しました。

            IDbConnection connection = new SqlConnection(ApplicationConfiguration.ConnectionString);
            connection.Open();

            ISession session = _sessionFactory.OpenSession(connection);
            session.FlushMode = FlushMode.Commit;

            return session;

私のアプリケーションは動作するようになりましたが、コレクションを持つすべてのオブジェクトは、コレクションなしでデータベースに永続化されています。たとえば、車にタイヤのリストがあるとします。次に、車を作成し、データベースに既に存在するタイヤに基づいてタイヤのリストを生成します。車のオブジェクトを保存すると、リストではなく車だけが保存されます!

私が間違っていることについて何か助けはありますか?私は NHibernate 2.0 を使用しており、Session.Flush() と Transaction.Commit() を呼び出しています。

乾杯。

4

3 に答える 3

3

こんにちは、コレクションが永続化されていない理由がわかりました。私の作業単位は、オブジェクトを永続化する Isession オブジェクトを返すプロパティを呼び出していました。ただし、このプロパティは実際には呼び出しごとに新しい ISession を返しました。CO各作業単位内で同じ ISession を使用するようにこれを修正したところ、オブジェクトは適切に永続化されました。でも、助けてくれてありがとう。

于 2008-12-19T13:57:22.363 に答える
2

コレクション マッピングのカスケード属性を確認してください。デフォルトでは、これは「なし」に設定されています。つまり、子エンティティを明示的に保存する必要があります。おそらく cascade="all" または cascade="all-delete-orphan" が必要です。

于 2008-12-19T03:30:20.637 に答える
0

タイヤリストのフラッシュとコミットの前に NHibernate.ISession.save(object) を使用していますか?

于 2008-12-19T12:47:49.523 に答える