批量更新从更新返回了意外的行数;实际行数:0;预期:1

时间:2011-12-02 01:57:16

标签: c# sql database nhibernate orm

我很难找出NH异常:

  

批量更新从更新返回了意外的行数;实际行   数:0;预期:1

我的Dal代码:

 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 [类型:指南(0)],@ p1 =   '1@hotmail.com'[类型:字符串(4000)],@ p2 ='myFriend'[类型:字符串   (4000)],@ p3 = 2ea35658-edb1-43e3-b848-e1915d1042df [类型:指南(0)]

     

2011-12-02 13:06:49,750 [代理:适配器运行线程进行测试   带有id的'SaveFriendDetails_Test'   '17016e48-1ff4-4dea-8536-6aa3b24e5fb7']调试   NHibernate.AdoNet.AbstractBatcher - 关闭IDbCommand,打开   IDbCommands:0 2011-12-02 13:06:49,751 [代理:适配器运行线程为   用id测试'SaveFriendDetails_Test'   '17016e48-1ff4-4dea-8536-6aa3b24e5fb7']错误   NHibernate.Event.Default.AbstractFlushingEventListener - 不能   将数据库状态与会话同步   NHibernate.StaleStateException:批量更新返回意外行   从更新开始计算;实际行数:0;预期:1

有没有人看到这个问题?

TIA

2 个答案:

答案 0 :(得分:32)

问题是在保存时我不应提供id值,在更新时我必须提供它。

答案 1 :(得分:3)

在保存之前,您必须将Id对象设置为null

示例:

obj.setId(null);
objectDao.save(obj);