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
問題は、保存時にID値を指定するべきではなく、更新時に指定する必要があることでした。
保存する前に、Idオブジェクトをnull
に設定する必要があります。
例:
obj.setId(null);
objectDao.save(obj);