我開始與nHibernate並有一個簡單的例子,我不能按我的意願工作。nhibernate 2 linq急切加載
我有兩個模型對象(博客和帖子),我想將它們全部加載到一個場景的單個查詢中。我想在其他情況下延遲加載。
我天真地以爲我可以寫這樣的事:
var blogs = session.Linq<Blog>().Expand("Posts");
但是,這會給我博客的實例爲每一個崗位,而不是增加職位的博客。
我知道我在做一些愚蠢的事情。有人可以指出它是什麼嗎?是否需要在我的linq查詢中關聯帖子和博客實體?
代碼和映射:
public class Blog
{
public Blog()
{
Posts = new HashSet<Post>();
}
public virtual long Identifier { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Post> Posts { get; set; }
public virtual Post AddPost(Post post)
{
post.Blog = this;
Posts.Add(post);
return post;
}
}
public class Post
{
public virtual long Identifier { get; set; }
public virtual string Name { get; set; }
public virtual Blog Blog { get; set; }
}
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="nhibEx" namespace="nhibEx">
<class name="Blog" lazy="true">
<id name="Identifier">
<generator class="native" />
</id>
<property name="Name" not-null="true" length="100"/>
<set name="Posts" inverse="true" cascade="save-update" lazy="true">
<key column="BlogIdentifier" foreign-key="fk_Post_Blog"/>
<one-to-many class="Post"/>
</set>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="nhibEx" namespace="nhibEx">
<class name="Post" lazy="true">
<id name="Identifier">
<generator class="native" />
</id>
<property name="Name" not-null="true" length="255"/>
<many-to-one name="Blog" column="BlogIdentifier" class="Blog" />
</class>
</hibernate-mapping>
謝謝帕科和阿列克謝。你是對的,這是伎倆。我會在另一個論壇發帖,試圖理解爲什麼這樣做。 – LostSilver 2009-11-17 20:06:54