web-dev-qa-db-ja.com

バッチ更新により、更新から予期しない行数が返されました。実際の行数:0;予想:1

NHの例外を理解するのに苦労しています:

バッチ更新により、更新から予期しない行数が返されました。実際の行数:0;予想:1

私のダルコード:

 public T Save(T item)
        {
            using (ISession session = NHibernateHelper.GetSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    session.SaveOrUpdate(item);

                    transaction.Commit();

                    return item;
                }
            }
        }

私のlog4netファイル:

コマンド0:UPDATE Metadata_FriendDetails SET UserId = @ p0、Email = @ p1、Name = @ p2 WHERE FriendId = @ p3; @ p0 = a358ab9d-d481-4bdd-8cb2-18ddc8898c70 [Type:Guid(0)]、@ p1 = '[email protected]' [タイプ:文字列(4000)]、@ p2 = 'myFriend' [タイプ:文字列(4000)]、@ p3 = 2ea35658-edb1-43e3-b848-e1915d1042df [タイプ:GUID(0) ]

2011-12-02 13:06:49,750 [エージェント:ID'17016e48-1ff4-4dea-8536-6aa3b24e5fb7 'のテスト' SaveFriendDetails_Test 'のアダプター実行スレッド] DEBUG NHibernate.AdoNet.AbstractBatcher-IDbCommandを閉じ、IDbCommandsを開きます:0 2011 -12-02 13:06:49,751 [エージェント:ID'17016e48-1ff4-4dea-8536-6aa3b24e5fb7 'のテスト' SaveFriendDetails_Test 'のアダプター実行スレッド]エラーNHibernate.Event.Default.AbstractFlushingEventListener-データベースの状態をセッションと同期できませんでしたNHibernate.StaleStateException:バッチ更新が更新から予期しない行数を返しました。実際の行数:0;予想:1

誰かが問題を見ていますか?

TIA

17
Elad Benda2

問題は、保存時にID値を指定するべきではなく、更新時に指定する必要があることでした。

33
Elad Benda2

保存する前に、Idオ​​ブジェクトをnullに設定する必要があります。

例:

obj.setId(null);
objectDao.save(obj);
3
Ameksa Yeksan