Вам необходимо добавить свойство Blog к Post , если оно должно быть ненулевым (см. Последний абзац в 6.4. Ассоциации «один ко многим» )
Вот некоторые сопоставления, которые должны работать:
<class name="Blog" dynamic-update="true">
<id name="Id">
<generator class="..."/>
</id>
<property name="Name" />
<many-to-one name="LastComment" column="LastCommentId" cascade="all" />
<bag name="Posts" cascade="all" inverse="true">
<key column="BlogId" />
<one-to-many class="Post" />
</bag>
</class>
<class name="Post">
<id name="Id">
<generator class="..."/>
</id>
<property name="Content" />
<many-to-one name="Blog" column="BlogId" />
<bag name="Comments" inverse="true">
<key column="PostId" />
<one-to-many class="Comment" />
</bag>
</class>
<class name="Comment">
<id name="Id">
<generator class="..."/>
</id>
<property name="Feedback" />
<many-to-one name="Blog" column="BlogId" not-null="true" cascade="all" />
</class>
Тогда вы сможете использовать код, подобный следующему:
using (var session = sessionFactory.OpenSession())
using (var tx = session.BeginTransaction())
{
var blog = new Blog { Name = "My Blog" };
var post = new Post { Blog = blog, Content = "My First Post" };
var comment = new Comment { Blog = blog, Feedback = "Awesome!" };
blog.LastComment = comment;
blog.Posts = new List<Post> { post };
post.Comments = new List<Comment> { comment };
session.Save(comment);
tx.Commit();
}
Это вставляет Блог , затем Пост , затем Комментарий , затем он обновляет Блог , чтобы установить LastCommentId .
Обратите внимание, что вам нужно позвонить Сохранить на Комментарий ;все остальное потерпит неудачу.