没有在NHibernate中没有代理的加载关联

时间:2010-05-20 19:55:18

标签: nhibernate

我不喜欢代理和延迟加载的想法。我不需要那个。我想要纯粹的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实体?

3 个答案:

答案 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。

Davy Brion - Must Everything be Virtual with NHibernate