2009-08-07 8 views
0

Probablement une question stupide mais j'ai un certain nombre d'entités qui héritent toutes d'une entité de base. L'entité de base n'a pas de table dans la base de données. Chaque entité a sa propre table et la définition de la table est exactement la même. L'exemple extrêmement simplifié du code est ci-dessous.Héritage NHibernate/NHibernate Question

public abstract class BaseEntity 
{ 
    public virtual string someProperty {get; set;} 
} 

public class Entity1 : BaseEntity{} 

public class Entity2 : BaseEntity{} 

public class CompletelyDifferentEntity 
{ 
    public virtual IList<BaseEntity> {get; set;} 
} 

J'ai créé les mappages pour les entités. Dans mes autres classes de domaine, si je référence les classes concrètes, tout fonctionne correctement, mais si je change mes autres classes en référence à BaseEntity, j'obtiens une exception de mappage parce que BaseEntity n'est pas mappé. Est-ce quelque chose où je devrais utiliser un discriminateur de sous-classe? Je suppose que je ne vois pas la bonne façon de le faire si la base n'a pas de table associée et les sous-classes n'ont pas une colonne spécifique qui est différente entre les définitions de la table.

Répondre

1

Vous devez utiliser l'une des trois stratégies de mappages d'héritage disponibles. À partir de votre description, vous devriez envisager d'utiliser le mappage table-par-classe-concrète ou modifier votre schéma de base de données.

Vous trouverez plus d'informations sur les avantages et les inconvénients des stratégies ici: https://www.hibernate.org/hib_docs/nhibernate/html/inheritance.html.

+0

Je me pencherai un peu plus sur le mappage table par béton. Malheureusement, la modification du schéma db ne fonctionnera pas car il existe plusieurs systèmes préexistants qui dépendent du schéma tel qu'il est actuellement. –