Может кто-нибудь объяснить мне эту маленькую загадку о том, как NHibernate работает с составными элементами.
У меня есть классы, которые выглядят так:
public class Blog
{
public virtual int Id
{
get;
private set;
}
public virtual ISet<Comment> Comments
{
get;
set;
}
}
public class Comment
{
public virtual string CommentText
{
get;
set;
}
public virtual DateTime Date
{
get;
set;
}
}
и такие сопоставления;
<class name="Blog" table="blog">
<id name="Id" column="id" unsaved-value="0">
<generator class="hilo"/>
</id>
<set name="Comments" table="blog_comments">
<key column="blog_id" />
<composite-element class="Comment">
<property name="CommentText" column="comment" not-null="true" />
<property name="Date" column="date" not-null="true" />
</composite-element>
</set>
</class>
Однако, когда я выполняю выбор, подобный этому;
using (ITransaction transaction = session.BeginTransaction())
{
Blog blog = session.CreateCriteria(typeof(Blog))
.SetFetchMode("Comments", FetchMode.Eager)
.Add(Expression.IdEq(2345))
.UniqueResult();
transaction.Commit();
}
NHibernate выдает выбор с объединением, чтобы получить блог с сообщениями, НО затем удаляет все комментарии и затем вставляет комментарии! Почему он это делает? Если я не использую транзакцию, тогда она выполнит ТОЛЬКО выбор, а не УДАЛЕНИЕ и ВСТАВКА, как я ожидал. Что мне не хватает? Я использую NHibernate 2.0