In meiner Domäne haben ein Mitarbeiter und eine Abteilung eine bidirektionale Eins-zu-Viel-Beziehung; damit der untergeordnete Mitarbeiter dies synchronisieren kann, habe ich ein "internes" Zugriffsfeld für die Menge (Iesi für NHibernate) der Mitarbeiter, die in der Abteilung sind, die sonst nur lesend öffentlich sein würde. Etwa so:
Klasse der Abteilung:
protected internal ISet<Employee> _staff;
public virtual ReadOnlyCollection<Employee> Staff {
get { return new List<Employee>(_staff).AsReadOnly(); }
}
public virtual void AddStaff(Employee emp) {
emp.Department = this; }
}
Angestelltenklasse:
private Department _department;
public virtual Department Department {
set {
// check valid value, etc.
value._staff.Add(this);
}
}
Ich habe den Zugriff in meinem (FNH) Mapping AsField(Prefix.Underscore), aber da ich das Feld Department._staff nicht virtuell machen kann, ist NH nicht glücklich. Ich schätze, ich könnte das Feld zu einer virtuellen Eigenschaft machen und es zwangsweise zuweisen, aber das fühlt sich an, als würde ich die Domänenklasse zu sehr auf die Persistenz aufmerksam machen.
Ich lerne sowohl NH als auch FNH, und ich weiß, dass ich einen guten Grundkurs in Relationship Mapping brauche, aber meine primäre Frage für diesen Beitrag ist die Logik in meinen Domänenklassen:
1) Ist dies eine gute c# Programmierung Muster für eine schreibgeschützte Menge in einer biderektionalen Beziehung?
2) Was ist der beste Weg, um dies für NHibernate besser nutzbar zu machen?
Danke für den Austausch!
Berryl