我不喜欢代理和延迟加载的想法。我不需要那个。我想要纯粹的POCO。我想在需要时明确控制加载关联。
这是实体
public class Post
{
public long Id { get; set; }
public long OwnerId { get; set; }
public string Content { get; set; }
public User Owner { get; set; }
}
和映射
<class name="Post">
<id name="Id" />
<property name="OwnerId" />
<property name="Content" />
<many-to-one name="Owner" column="OwnerId" />
</class>
但是,如果我在映射中指定lazy =“false”,则始终会急切地获取所有者。 我无法删除多对一映射,因为这也会禁用显式加载或像
这样的查询from x in session.Query<Post>()
where x.Owner.Title == "hello"
select x;
我指定了lazy =“true”并将use_proxy_validator属性设置为false。但那也渴望加载所有者。
有没有办法只加载Post实体?
答案 0 :(得分:0)
简而言之,NH无法使用。但这里是尝试只是,没有代理的延迟加载
http://thinkbeforecoding.com/post/2009/02/07/Lazy-load-and-persistence-ignorance
答案 1 :(得分:0)
在映射
上将班级User
设置为lazy = false
<class name="User" table="Users" lazy="false">
答案 2 :(得分:0)
删除此媒体资源<property name="OwnerId" />
...以获取您可以使用Owner.Id
的所有者ID。这不会触发延迟加载。只有在你点击id之外的任何属性时才会加载所有者。要使它成为平坦/简单的POCO,您可以使用投影和ResultTransformers。