モデルが一時的になる可能性のあるクエリを実行している古いコードがあります。つまり、ユーザー入力から取り込まれたいくつかのフィールドを持つモデルが、クエリの一部として使用されます。 NH 2.1.xで動作しましたが、最新バージョンでは失敗しています。TransientインスタンスによるNHibernateクエリの結果、 "一時インスタンスを保存する" - 例外
例外は「オブジェクトは未保存の一時インスタンスを参照しています - フラッシュする前に一時インスタンスを保存しています」。これはNHが、非永続オブジェクトをクエリの一部として使用してクエリを実行しようとしたときに発生します。
問題を説明する簡略化されたバージョン。
とコードを呼び出すと、これに相当します:私は(古いNHibernateのバージョンの動作のように見えるもの)が起こることが予想何
Engine obj = new Engine { Id = 42 }; // Transient instance
var x = GetByEngine(obj);
、渡されたエンジンのみに使用されていることですイドを得るつまり、 select ....のようなSQlを生成しています。Cars where Engine = 42
しかし、新しいバージョンでは、NHibernateはExpressionで使用されているエンジンが実際に永続化されているかどうかをチェックしているようです。
クエリを実行する前に永続化されたエンジンを読み込まなくて済む方法はありますか?
ご返信が遅れました。これはトリックを行い、OPで私の質問に答えます。手元にある問題を解決しました。 – Thomas