我有一个正在批量处理的 Item 实体列表,如下所示:
foreach (var itemId in ItemIdList)
{
var item = getById(itemId); //load line
if(item != null)
{
//...do some processing
delete(item)
}
}
问题是,同一个 itemId 可能会在 ItemIdList 中列出多次,所以删除后,我再次尝试加载该项目,加载行失败并出现错误
Unexpected row count: 0; expected: 1 (stale state exception)
我知道实体不再存在,但我希望我的 get 函数只返回 null。这是我的 getById 函数:
var item = (from i in UnitOfWork.CurrentSession.QueryOver<T>()
where i.Id == id
select i
).SingleOrDefault();
为什么SingleOrDefault不只返回 null?
我的 Item 实体只有一个自动生成的键,哈希函数如下所示:
public override int GetHashCode()
{
int hashCode = 0;
hashCode = hashCode ^ Id.GetHashCode();
return hashCode;
}
编辑:
这是我的删除方法
public void Delete(T t) //T would be Item in this case
{
UnitOfWork.CurrentSession.Delete(t);
}