0

J'ai deux classes:Nhiberante Courant sous classe même table que la classe

class User { 
    public int Id { get;set; } 
    public string Name { get; set; } 
} 

class VerifiedUser : User { 
    public ICollection<Verified> { get; set; } 
} 

Je voudrais NHibernate pour traiter VerifiedUser et User comme la même table, mais gardez-les séparés, donc.

Session.Query<User>() //would return a User 
Session.Query<VerifiedUser>() //would return a VerifiedUser 

Est-ce possible ou non supporté?

+0

Pourquoi voudriez-vous les traiter comme la même table? Ils ne sont clairement pas la même entité. –

+0

http://ayende.com/blog/3941/nhibernate-mapping-inheritance Cela peut aider ... spécifier la table "abstract" et ses sous-tables dans le hbm. – Yaw

+0

Quelle est la différence entre les deux entités? Ils sont persistés à partir de la même table mais disent avec une clause différente where? S'il vous plaît clarifier/modifier votre question. – kayess

Répondre

0

Vous aurez besoin de mettre en œuvre la stratégie table-per-hierarchy avec la classe Fluid Nhiberate dans les classes de mapping. Ce sont comme des remplacements pour la fonction AutoMapping (si utilisée) de FNH, sinon les classes de mapping sont de facto et vous y serez habitué.

Quelque chose comme:

public class UserMappingOverride : IAutoMappingOverride<User> 
{ 
    public void Override(AutoMapping<User> mapping) 
    {     
     mapping.DiscriminateSubClassesOnColumn("IsVerified").Not.Nullable(); 
    } 
} 

public class VerifiedUserClassMap : SubclassMap<VerfiedUser> 
{ 
    public VerifiedUserClassMap() 
    { 
     DiscriminatorValue("Yes"); 
    } 
} 

Et pour répondre à votre question, oui, autant que je me rappelle rien à voir ici: Session.QueryOver<VerifiedUser>() comme NHibernate ajoutera à la clause where pour le discriminateur