我很难找出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
答案 0 :(得分:32)
问题是在保存时我不应提供id值,在更新时我必须提供它。
答案 1 :(得分:3)
在保存之前,您必须将Id对象设置为null
。
示例:
obj.setId(null);
objectDao.save(obj);