У меня есть сценарий в NHibernate, где у меня есть отношения один-ко-многим между сущностями Employee и EmployeeStatus.
Сотрудник имеет свойства, например: ID, Имя и IList EmployeeStatus, в то время как EmployeeStatus для целей этого вопроса просто имеет свой собственный идентификатор и некоторый свободный текст.
Мне не нужно хранить ссылку на Employee из EmployeeStatus, управление статусом будет осуществляться исключительно через сущность Employee - добавление к свойству IList. IE: я хочу просто быть в состоянии сделать следующее;
Employee e = new Employee();
e.Name = "Tony";
e.StatusList.Add( new EmployeeStatus("Status A") );
e.StatusList.Add( new EmployeeStatus("Status B") );
session.Save(e);
Я пробовал различные методы, в том числе создание одностороннего сопоставления один-ко-многим, когда обратное значение равно false, для каскада установлено значение all-delete-orphan, которое выглядит так, как будто оно должно работать, но при этом генерируется исключение невозможно установить EmployeeId в EmployeeStatus. Я склонен полагать, что это потому, что NHibernate хочет сделать вставку с EmployeeId как NULL, а затем обновить его до идентификатора родителя.
Я полагаю, что я что-то здесь упускаю, так просто - кто-нибудь может сказать мне, как должен выглядеть мой файл сопоставления для достижения вышеуказанного?
Заранее спасибо
Tony
- правка: Вот примерное представление о классах согласно запросу -
public class Employee
{
private IList<EmployeeStatus> _statusList;
public Employee()
{
_statusList = new List<EmployeeStatus>();
}
public virtual int Id{ get; set; }
public virtual string Name{ get; set; }
public virtual IList<EmployeeStatus> StatusList
{
get
{
return _statusList;
}
}
}
public class EmployeeStatus
{
public virtual int Id{ get; set; }
public virtual string StatusText{ get; set; }
public EmployeeStatus()
{
}
public EmployeeStatus(string statusText)
{
StatusText = statusText;
}
}