2010-12-27 4 views
1


Ich habe die folgenden Klassen enthalten würde:
nHibernate- eine Sammlung, die nur ein übergeordneter Typ

class Employee 
{ 
    public string Name { get; set; } 
} 

class HistoricalEmployee : Employee 
{ 
    public DateTime TerminationDate { get; set; } 
} 

class Company 
{ 
    public IList<Person> CurrentEmployees { get; set; } 
} 


Mitarbeiter und HistoricalEmployee gemappt mit Tabelle pro Klasse-Hierarchie-Strategie.
Wenn ich die CurrentEmployees-Auflistung abrufe, möchte ich nur Elemente enthalten, die Employee und NICHT HistoricalEmployees sind.
Wenn ein Mitarbeiter "stirbt", werden sie nicht wirklich gelöscht,
, aber sie werden HistoricalEmployee (mit einigen weiteren Attributen wie Beendigungsdatum usw.).
Offensichtlich wird die Anzahl der HistoricalEmployees im Laufe der Zeit die Anzahl der Mitarbeiter nach Magnituden,
überschreiten, so dass ich nicht alle HistoricalEmployees abrufen kann, wenn ich nur aktuelle Mitarbeiter brauche.

Wie kann ich (fließend) die Sammlung so konfigurieren, dass nur Elemente der Superklasse abgerufen werden?
Ich denke, es hat etwas mit der Polymorphismus-Eigenschaft zu tun, aber ich konnte nicht wirklich herausfinden, wie man das macht.


Dank,
Jhonny

Antwort

1

Ok, habe ich dies in etwa so:

mapping.HasMany(x => x.CurrentEmployees) 
      //.Where(pqa => pqa.TimeOut != null) 
      .Where("TerminationDate is null") 

offenbar, die .Where() Funktion auf dem Grundstück einen Filter erzeugt, was genau das ist, was Ich brauchte.
Beachten Sie, dass ich die String-Version verwendet und die Func <> Version auskommentiert habe.
Dies ist, dass derzeit (FNH 1.1), soweit ich feststellen konnte, die Func <> Version nicht funktioniert.
Hoffnungen dies ist nicht narrensicher Dieses jemand,
J

+0

hilft. Wenn ich mich richtig erinnere, wird das Where nicht auf HQL-Abfragen angewendet, sondern auf die Kriterien-API. Ich würde sehr vorsichtig sein, es zu benutzen. –

Verwandte Themen