В моем домене Сотрудник и Департамент имеют двустороннюю связь один-ко-многим; чтобы позволить дочернему сотруднику синхронизировать это, у меня есть «внутреннее» поле доступа для набора (то есть для NHibernate) сотрудников, которые находятся в отделе, которые в противном случае были бы доступны только для чтения. Вот так:
Класс отдела:
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; }
}
Класс сотрудника:
private Department _department;
public virtual Department Department {
set {
// check valid value, etc.
value._staff.Add(this);
}
}
Я сделал доступ в своем (FNH) сопоставлении AsField (Prefix.Underscore), но так как я не могу сделать поле Department._staff виртуальным NH, это не устраивает. Полагаю, я мог бы сделать поле виртуальным свойством и принудительно кормить его, но такое чувство, что я делаю класс домена чрезмерно осведомленным о постоянстве.
Я изучаю как NH, так и FNH, и я знаю, что мне нужен хороший учебник по картированию отношений, но мой основной вопрос для этого поста - логика в моих классах предметной области:
1) Является ли это хорошим шаблоном программирования на C # для набора только для чтения в двунаправленной взаимосвязи?
2) Каков наилучший способ сделать это более удобным для NHibernate?
Спасибо, что поделились!
Berryl