Voici mes classes appropriées:collection inhabituelle NHibernate/cartographie héritage
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; }
}
Et voici les pièces cartographiques pertinentes:
<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>
L'espoir tout est clair jusqu'à présent. Ce que j'essaie de faire est la suivante: lorsque je sélectionne mes objets Section
, je veux qu'ils ne contiennent que des objets "légers" ArticleMetadata
. Mais lors de l'enregistrement Section
à la DB, je veux NHibernate persister Article
objets ainsi:
var section = new Section();
section.Articles.Add(new ArticleMetadata("a1"));
section.Articles.Add(new Article("a2", "massive clob"));
session.SaveOrUpdate(section);
Actuellement, SaveOrUpdate
sortie sans erreur que ce soit, mais un objet Article
complet est enregistré que partiellement. En d'autres termes, la valeur de sa propriété Content
ne parvient jamais à la base de données.
Enregistrement Article
séparément (session.Save(new Article(...));
) fonctionne comme prévu, en enregistrant toutes les propriétés mappées. En résumé: Je souhaite ajouter à la fois les objets ArticleMetadata
et Article
à la collection Section.Articles
, et je souhaite qu'ils soient enregistrés correctement. Ce genre de comportement est-il possible?