我正在使用 NHibernate,我想控制手动获取相关实体。
这是我的示例实体
public class Post
{
public virtual long Id { get; set; }
public virtual string Title { get; set; }
public virtual User User { get; set; }
public virtual IList<Like> Likes { get; set; }
public virtual IList<Tag> Tags { get; set; }
}
我期望的行为如下:
session.Query<Post>().ToList();
在这种查询之后,我希望 Post
实体具有:
- 基本属性已设置
User
属性不为空,但只设置了 Id 属性。Likes
和Tags
为 null 或空集合
-
session.Query<Post>()
.Fetch(p => p.User)
.Fetch(p => p.Tags)
.ToList();
在这种查询之后,我希望 Post
实体具有:
- 基本属性已设置
User
属性不为 null 并且属性已设置。Tags
不为 null 并且所有项目都设置了所有属性Likes
为 null 或空集合
基本上我想从 NHibernate 得到的是,不获取任何相关实体,除非我要求它获取并且在我尝试访问未获取的属性时不会导致 NHibernate 特定异常(LazyInitialization 等)。我期望的行为既不懒惰也不急切。
在“你试过什么”评论之前,我在 Fluent 中尝试了几乎所有与 LazyLoad()
、Not
、Fetch
等的组合NHibernate 映射配置以及无状态和有状态 session 。
最佳答案
我无法弄清楚如何在调用引用之前不进行验证的情况下处理未初始化的实例:
NHibernateUtil.IsInitialized(entityOrCollection)
和/或
NHibernateUtil.IsPropertyInitialized(obj, "propertyName")
关于c# - NHibernate 手动控制抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29826248/