【问题标题】:Batch update returned unexpected row count from update; actual row count: 0; expected: 1批量更新从更新返回了意外的行数;实际行数:0;预期:1
【发布时间】:2012-01-11 03:49:28
【问题描述】:

我很难弄清楚 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 文件:

command 0:UPDATE Metadata_FriendDetails SET UserId = @p0, Email = @p1, 名称 = @p2 WHERE FriendId = @p3;@p0 = a358ab9d-d481-4bdd-8cb2-18ddc8898c70 [类型:Guid (0)],@p1 = '1@hotmail.com' [类型:字符串 (4000)],@p2 = 'myFriend' [类型:字符串 (4000)],@p3 = 2ea35658-edb1-43e3-b848-e1915d1042df [类型:Guid (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

【问题讨论】:

  • 我觉得应该用异常写出异常的来源。会更有帮助。
  • 有几个可能,您的对象已分离,并且从未在数据库中实际创建,因此没有要更新的原始对象行。或者在您更新之前,表中的某个值发生了变化。我认为这是一个可重复的异常?发布一些关于如何创建、更新和保存对象的代码片段会很有帮助。
  • 已添加。我不明白为什么:NHibernate.Event.Default.AbstractFlushingEventListener - 无法将数据库状态与会话 NHibernate 同步

标签: c# sql database nhibernate orm


【解决方案1】:

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

【讨论】:

  • 一旦有能力,请务必将此答案标记为已接受,以便其他人知道有解决方案。
【解决方案2】:

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

示例:

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

【讨论】:

  • 如果你有一个整数 ID,你必须使用:obj.setId(0) - 所以它可以工作。不适合我,因为我已将 Id 设置为 -1
猜你喜欢
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多