批量更新从更新中返回了意外的行数;实际行数:0;预期:使用 NHibernate 进行删除操作时为 1
Batch update returned unexpected row count from update; actual row count: 0; expected: 1 when delete operation using NHibernate
我在c#中使用NHibernate并执行删除操作:
我的问题是,当我在 'PC1' 上由 'A' 用户登录并在 'PC2' 上由同一用户登录时,因为我没有提供。该用户的会话 2 并删除一个
record from 'PC1' record deleted successfully, 但是当相同的记录从 'PC2' delete without refresh page.then 时,出现如下异常:
"Batch update returned unexpected row count from update; actual row count: 0; expected: 1"
我的代码是:
public void Delete(object instance)
{
using(NHSession.BeginTransaction())
{
NHSession.Delete(instance);
NHSession.Transaction.Commit();
}
}
这里-
NHSession.Transaction.Commit();当我从 'PC2' 中删除时,这一行出错。
所以在这里如何使用 NHibernate 处理这个问题。
执行完这个make sql查询后如下:
DELETE FROM [Employee].[dbo].Employee_Master WHERE EmpID = @p0;@p0 = d3b9df34-97c6-450a-a570-a62000dd5125 [Type: Guid (0)]
当相同的查询在 sql Studio 中执行时,它 return 跟随 o/p:
(0 行受影响)
这是由于处理事务或分离实体的奇怪方式造成的。当您避免直接删除分离的实体时,它不会发生。
我不知道为什么你的交易是这样的。
要么您应该从某个更高层开始事务(永远不要在数据访问层内管理事务),
或者您直接从客户端获取对象并将其作为附加实例加载。在这种情况下,您应该只从客户端而不是分离实例获取 id:
public void DeleteUserSession(Guid id)
{
using(NHSession.BeginTransaction())
{
var instance = NHSession.Get(typeof(UserSession), id);
if (instance != null)
{
NHSession.Delete(instance);
}
NHSession.Transaction.Commit();
}
}
我在c#中使用NHibernate并执行删除操作: 我的问题是,当我在 'PC1' 上由 'A' 用户登录并在 'PC2' 上由同一用户登录时,因为我没有提供。该用户的会话 2 并删除一个
record from 'PC1' record deleted successfully, 但是当相同的记录从 'PC2' delete without refresh page.then 时,出现如下异常:
"Batch update returned unexpected row count from update; actual row count: 0; expected: 1"
我的代码是:
public void Delete(object instance)
{
using(NHSession.BeginTransaction())
{
NHSession.Delete(instance);
NHSession.Transaction.Commit();
}
}
这里-
NHSession.Transaction.Commit();当我从 'PC2' 中删除时,这一行出错。 所以在这里如何使用 NHibernate 处理这个问题。 执行完这个make sql查询后如下:
DELETE FROM [Employee].[dbo].Employee_Master WHERE EmpID = @p0;@p0 = d3b9df34-97c6-450a-a570-a62000dd5125 [Type: Guid (0)]
当相同的查询在 sql Studio 中执行时,它 return 跟随 o/p:
(0 行受影响)
这是由于处理事务或分离实体的奇怪方式造成的。当您避免直接删除分离的实体时,它不会发生。
我不知道为什么你的交易是这样的。
要么您应该从某个更高层开始事务(永远不要在数据访问层内管理事务), 或者您直接从客户端获取对象并将其作为附加实例加载。在这种情况下,您应该只从客户端而不是分离实例获取 id:
public void DeleteUserSession(Guid id)
{
using(NHSession.BeginTransaction())
{
var instance = NHSession.Get(typeof(UserSession), id);
if (instance != null)
{
NHSession.Delete(instance);
}
NHSession.Transaction.Commit();
}
}