Je rencontre un problème de mappage d'une relation plusieurs-à-un d'un mappage de classe de base abstrait vers une union-sous-classe concrète. Exemple:Mappage des relations plusieurs-à-un de NHibernate de classes de base abstraites à union-sous-classes
public abstract class Entity
{
public virtual Guid ID {get; set;}
public virtual string Name {get;set;}
public virtual User OwnerUser {get; set;}
}
public class User : Entity
{
public virtual string UserName {get; set;}
}
Comme vous pouvez le voir ici, j'ai une classe abstraite de base pour tous mes objets de base de données. Je mappe ces classes avec la classe Entity en tant que classe de mappage abstrait et l'utilisateur en tant que sous-classe union. Lors de la création de l'objet de configuration, aucune erreur n'est levée et le schéma exporte correctement. Cependant, le champ de l'utilisateur propriétaire ne s'affichera pas dans la base de données pour toutes les classes concrètes. Voici un exemple de l'apparence du mappage
<class entity-name="Entity" name="Entity" abstract="true">
<id name="ID" type="guid">
<generator class="guid.comb"/>
</id>
<property name="Name" />
<many-to-one name="OwnerUser" column="ID" entity-name="User" />
</class>
<union-subclass name="User" entity-name="User" extends="Entity">
<property name="UserName" />
</union-subclass>
J'utilise également une instance Oracle XE en tant que backend de base de données. Si ce n'est pas assez d'informations pour répondre correctement à la question, faites le moi savoir et je vais ajouter ce que je peux.
Dans le pire des cas Je vais ajouter explicitement la relation plusieurs-à-un sur tous les objets concrets, mais ce n'est pas la solution la plus élégante et je pense que ce que j'ai proposé devrait fonctionner. J'ai été incapable de trouver des exemples concrets de ceci sur les tubes qui alimentent les différents internets, et je n'ai rien trouvé dans la documentation expliquant explicitement que c'est un cas d'utilisation invalide, bien que j'aurais pu manquer quelque chose. Ce ne serait pas la première fois: -/
Toutes les réponses à cette question sont grandement appréciées. Merci pour votre temps.