Основной вопрос. Как создать двунаправленную карту "один ко многим" в Fluent NHibernate?
Детали:
У меня есть родительский объект с большим количеством детей. В моем случае для ребенка не имеет смысла не иметь родителя, поэтому в базе данных я бы хотел, чтобы внешний ключ для родителя имел ограничение NOT NULL. Я автоматически генерирую свою базу данных из сопоставления Fluent NHibernate.
У меня есть родительский элемент с множеством дочерних объектов:
public class Summary
{
public int id {get; protected set;}
public IList<Detail> Details {get; protected set;}
}
public class Detail
{
public int id {get; protected set;}
public string ItemName {get; set;}
/* public Summary Owner {get; protected set;} */ //I think this might be needed for bidirectional mapping?
}
Вот отображение, с которого я начал:
public class SummaryMap : ClassMap<Summary>
{
public SummaryMap()
{
Id(x => x.ID);
HasMany<Detail>(x => x.Details);
}
}
public class DetailMap : ClassMap<Detail>
{
public DetailMap()
{
Id(x => x.ID);
Map(x => x.ItemName).CanNotBeNull();
}
}
В таблице Detail, Summary_id должен быть Not Null, потому что в моем случае бессмысленно иметь объект Detail, не привязанный к итоговый объект. Тем не менее, только использование карты HasMany() оставляет заниженный ключ Summary_id недействительным.
Я нашел в документах NHibernate (http://www.hibernate.org/hib_docs/nhibernate/html/collections.html): "Если требуется родительский элемент, используйте двунаправленную связь" один-ко-многим "".
Итак, как мне создать двунаправленную карту "один ко многим" в Fluent NHibernate?