c# - 如何检查代理的空值

标签 c# nhibernate proxy

我有一个用于加载实体的通用方法。我需要检查结果值是否为空值。

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/

相关文章:

c# - Fluent NHibernate Joined-Subclass 问题

c# - 为什么 nhibernate LINQ 不支持简单的外部连接(给定外部连接表上的 where 子句)?

NHibernate - 实用性

linux - helm 升级代理参数

apache - 从 Apache 和 Tomcat 提供文件

c# - Silverlight,连接到不同服务器上的多个数据库

c# - 将 ContextMenu 绑定(bind)到 Datagrid 列

c# - ASP.NET MVC 中的复选框禁用属性

c# - 将时间跨度除以 2?

tomcat - plesk 服务器中的代理设置