2010-06-26 7 views
0

Considérons une application constituée de Employees et de Administrators.NHibernate View Mapping

Un employee consiste en un , Name et EmailAddress.

Les employés sont stockés dans un système existant et sont en lecture seule si j'ai une classe Employee immuable mis en correspondance avec une vue (vw_Employee) comme suit:

[vw_Employee] -> EmployeeID(key), Name, EmailAddress 

maintenant pour cette application, certains des l'employé sera marqué comme administrateurs (Image un écran avec une liste déroulante d'employés, vous en sélectionnez un, cliquez sur ajouter et cet employé est maintenant un administrateur).

Un administrateur est un employé (a exactement les mêmes champs) de sorte que la table de base de données n'a besoin que de ressembler à ce qui suit:

[Administrators] -> EmployeeID(key) 

Dans la même application, je vais devoir afficher une liste de tous les Sans les noms de NHibernate, je pourrais obtenir une liste d'administrateurs en joignant la table [Administrators] avec la vue [vw_Employee] en utilisant la clé primaire EmployeeID.

Le problème que je rencontre est de savoir à quoi devrait ressembler la classe Administrator et comment la mapper avec NHibernate.

Toute aide serait appréciée

Répondre

1

D'un point de vue OO et l'administrateur n'est pas un employé, mais il a une relation avec l'employé 1-1.

Ainsi, vos classes serait:

public class Employee 
{ 
    ... 
} 

public class Administrator 
{ 
    public virtual TypeOfEmployeeId Id { get; protected set; } 
    public virtual Employee Employee { get; set; } 
} 

Depuis l'employé est immuable, peu importe que c'est une vue.

Mapping est tout aussi simple:

<class name="Administrator"> 
    <id name="Id"> 
    <generator class="foreign"> 
     <param name="property">Employee</param> 
    </generator> 
    </id> 
    <one-to-one name="Employee"/> 
</class> 

et l'utilisation ne peut pas être plus simple:

Employee employee = GetTheEmployee(); 
var administrator = new Administrator { Employee = employee }; 
session.Save(administrator); 
+0

Alors, comment voulez-vous obtenir une liste de l'employé qui ne sont pas administrateurs – kimsagro