3

FNH で更新を呼び出すと、次のエラーが発生します。

インデックスが範囲外でした。負ではなく、コレクションのサイズより小さくなければなりません。\r\nパラメータ名: index

それはおそらくいくつかの悪いマッピングです。これを診断する最良の方法は何ですか? 発行しようとしている UPDATE を本当に見たいです。

コードは次のとおりです。

    public void Update<T>(IEnumerable<T> values)
    {
            foreach (var value in values)
            {
                using (var tx = Session.BeginTransaction())
                {
                    this.Update(value, tx);
                    tx.Commit();
                }
        }
    }
4

1 に答える 1

7

マッピングを投稿できれば役に立ちますが、通常これは、FluentReferences構文を使用して親 > 子関係をマッピングし、同じ関係の外部キー列のマッピングも含めた場合に発生します。

これにより、nHibernate がフィールドを 2 回マッピングし、発生しているエラーが発生します。

References 構文を使用すると、nHibernate が外部キー列を処理しますが、それでもオブジェクトに外部キー列が必要な場合は、そのフィールドのマッピング定義を変更してReadOnly()、問題を解決するオプションを設定します。必要ない場合は、マッピング定義から完全に削除できます。

(自分自身を診断するために)尋ねられた質問に厳密に答えるために、2つのオプションを提案します。

  • 無料オプション -log4Netすべての SQL ステートメントをロガー コンポーネントに出力するように nHibernate をインストールして構成します。こうすることで、問題のあるステートメントがログ ファイルに表示され、問題を切り分けることができます。
  • 有料オプション - Hibernating Rhinos によるnHibernate Profilerのダウンロードと試用/購入。nHibernate によってデータベースに送信されたすべての SQL ステートメントの完全な詳細、改善のための推奨事項または警告、およびすべてが優れた GUI で提供されます。
于 2013-06-21T10:43:59.940 に答える