関連するクラスは次のとおりです。
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
オブジェクトのみを含めるようにします。しかし、DB に保存するときは、NHibernate にオブジェクトもSection
永続化してもらいたい: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
プロパティの値が DB に到達することはありません。
Article
個別に保存( session.Save(new Article(...));
) すると期待どおりに機能し、マップされたすべてのプロパティが保存されます。
要約すると、ArticleMetadata
とArticle
オブジェクトの両方をSection.Articles
コレクションに追加し、それらを適切に保存したいと考えています。この種の動作はまったく可能ですか?