我有一个用于加载实体的通用方法。我需要检查结果值是否为空值。
public TEntity LoadById(long id)
{
TEntity result = SessionInstance.Load<TEntity>(id);
if (result != null) //This condition is always true
if (result.Id == 0 ) //Throws ObjectNotFoundException
throw new Exception("Ex Text");
return result;
}
但是我的条件( if (result != null)
)始终为真,下一行 result.Propagate()
抛出 ObjectNotFoundException
此消息的异常:不存在具有给定标识符的行[RCISP.Domain.Entities.Person#1000]
因为结果实体是一个代理。 如何检查代理中空值的条件?
最佳答案
使用 NHibernate 的 ISession.Get
而不是 ISession.Load
。如果请求的项目不存在,Load
会抛出异常,但它也可能返回一个代理,该代理稍后用于从数据库加载对象 - 并且只有在该项目不存在时才会抛出异常。这就是发生在你身上的事情。
如果数据库中不存在该项目,另一侧的 Get
将返回 null
。正是您想要的。
有关该主题的更多信息 here .
关于c# - 如何检查代理的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8968994/