У меня есть база данных с таблицей ProbateCases и таблицей свойств.Таблица Properties имеет внешний ключ к таблице ProbateCases, называемый ProbateCaseId, поэтому взаимосвязь между ProbateCases и Properties является одно-ко-многим.
Мой уровень домена имеет класс ProbateCase и класс Property.Класс ProbateCase имеет коллекцию свойств, определенных следующим образом:
private IList<Property> _properties = new List<Property>();
public virtual IEnumerable<Property> Properties { get { return _properties; } }
public virtual Property AddProperty()
{
Property property = new Property();
_properties.Add(property);
return property;
}
Соответствующая часть отображения Fluent NHibernate выглядит следующим образом:
HasMany(x => x.Properties).Where("Deleted = 0").KeyColumn("ProbateCaseId").Cascade.All().Access.CamelCaseField(Prefix.Underscore);
Обратите внимание, что связь является однонаправленной -Класс ProbateCase имеет коллекцию Properties, но класс Property не имеет члена ProbateCase.
Я считаю, что запросы работают нормально - NHibernate создает соответствующий SQL для получения свойств с соответствующим значением ProbateCaseId.
Однако, когда я сохраняю ProbateCase, в который я добавил новое свойство, INSERT SQL НЕ содержит значения для поля внешнего ключа - поэтому я получаю исключение SQL, жалующееся на значение NULL во внешнем ключе:
INSERT INTO AdminOverview.Properties (PropertyName) VALUES ('Name of property') -- Where the hell is the ProbateCaseId field value???
Стоит ли ожидать, что NHibernate сам заполнит значение внешнего ключа, или я должен что-то еще сделать?