2

Avoir de la difficulté à comprendre la meilleure façon d'implémenter des sous-classes avec un référentiel générique en utilisant Fluent NHibernate.Référentiel NHibernate avec sous-classes

J'ai une classe de base et deux sous-classes, disent:

public abstract class Person 
{ 
    public virtual int PersonId { get; set; } 
    public virtual string FirstName { get; set; } 
    public virtual string LastName { get; set; } 
} 

public class Student : Person 
{ 
    public virtual decimal GPA { get; set; } 
} 

public class Teacher : Person 
{ 
    public virtual decimal Salary { get; set; } 
} 

Mes Mappages sont les suivantes:

public class PersonMap : ClassMap<Person> 
{ 
    public PersonMap() 
    { 
     Table("Persons"); 

     Id(x => x.PersonId).GeneratedBy.Identity(); 

     Map(x => x.FirstName); 
     Map(x => x.LastName); 
    } 
} 


public class StudentMap : SubclassMap<Student> 
{ 
    public StudentMap() 
    { 
     Table("Students"); 
     KeyColumn("PersonId"); 
     Map(x => x.GPA); 
    } 
} 

public class TeacherMap : SubclassMap<Teacher> 
{ 
    public TeacherMap() 
    { 
     Table("Teachers"); 
     KeyColumn("PersonId"); 
     Map(x => x.Salary); 
    } 
} 

-je utiliser un référentiel générique pour sauvegarder/retreive/mettre à jour les entités et cela fonctionne très bien - à condition de travailler avec Repository - où je sais déjà que je travaille avec des étudiants ou que je travaille avec des enseignants.

Le problème que je rencontre est le suivant: Que se passe-t-il quand j'ai un ID et que je dois déterminer le TYPE de personne? Si un utilisateur arrive sur mon site en tant que PersonId = 23, comment puis-je déterminer quel type de personne il s'agit? NHibernate gérera ceci pour vous.

Répondre

2

La seule chose que vous avez à faire est d'interroger la personne avec l'ID 23. NHibernate retournera quel que soit le type que cette personne est castée en tant que sa personne de baseclass. Ceci est bien sûr un exemple simple mais j'espère qu'il montre le principe de l'héritage polymorphe. Stratégie-modèle et génériques sont des armes puissantes contre ces contrôles de type laid.

+0

C'est au-delà impressionnant. Chaque jour je joue avec Fluent NHibernate (ou simplement NHibernate), j'apprends quelque chose de nouveau. Merci! – reallyJim

+0

@zoidbeck plaider sur le dernier commentaire, lien ou exemple? – mxmissile

Questions connexes