这是我的相关课程:
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
集合中,并希望它们被适当地保存。这种行为完全可能吗?