Вот мои соответствующие классы:Необычная коллекция NHibernate/отображение наследования
public class ArticleMetadata
{
public long ID { get; set; }
public string Slug { get; set; }
}
public class Article : ArticleMetadata
{
// This is a massive CLOB, hence separate class
public string Content { get; set; }
}
public class Section
{
public long ID { get; set; }
public IList<ArticleMetadata> Articles { get; set; }
}
И здесь являются соответствующими частями картографирования:
<class name="Article" table="Article">
</class>
<!-- Note that there's no explicit NHibernate inheritance mapping here -->
<class name="ArticleMetadata" table="Article">
</class>
<class name="Section" table="Section">
<bag name="Articles" cascade="all-delete-orphan" inverse="true" lazy="false">
<key column="SectionID" />
<one-to-many class="ArticleMetadata" />
</bag>
</class>
Надеется, что это не все ясно до сих пор.
То, что я пытаюсь сделать, заключается в следующем: при выборе объектов Section
я хочу, чтобы они содержали только «легкие» объекты ArticleMetadata
. Но при сохранении Section
к БД, я хочу NHibernate сохраняться Article
объектов, а также:
var section = new Section();
section.Articles.Add(new ArticleMetadata("a1"));
section.Articles.Add(new Article("a2", "massive clob"));
session.SaveOrUpdate(section);
В настоящее время SaveOrUpdate
выхода без каких-либо ошибок бы то ни было, но полномасштабный Article
объект будет сохранен только частично. То есть значение его свойства «Content
» никогда не попадает в БД.
Сохранение Article
отдельно (session.Save(new Article(...));
) работает должным образом, сохраняя все отображаемые свойства.
Подводя итог: хочу добавить и ArticleMetadata
, и Article
объектов в коллекцию Section.Articles
, и хотим, чтобы они были сохранены надлежащим образом. Возможно ли такое поведение вообще?