I start with nHibernate and have a simple example that I cannot work as I would like.
I have two model objects (Blog and posts), and I would like to load them all in one request for one scenario. I want lazy loading in other cases.
I naively thought I could write something like this:
var blogs = session.Linq<Blog>().Expand("Posts");
But this will give me a blog instance for each post, rather than adding blog entries.
I know I'm doing something stupid. Can someone point out what it is? Do I need to bind post and blog objects in my linq request?
Code and Mappings:
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>
source share