Вы можете использовать IList с <bag>
(и <idbag>
, я полагаю). Я всегда использую IList с nHibernate, и я не видел, чтобы ISet часто использовался с nHibernate в открытом исходном коде.
Мне любопытно, используете ли вы файлы HBM или свободный nHibernate, с Fluent это довольно просто, просто создайте коллекцию IList, и она позаботится обо всем остальном.
Кроме того, Дэвид, nHibernate не может быть "нативным", но вам не нужно ссылаться на nHibernate в вашей доменной модели (по крайней мере, я надеюсь, что вы этого не сделаете). Постоянное невежество - одна из особенностей nHibernate.
Я часто сопоставляю отношения «многие-к-одному» следующим образом:
Родитель:
public IList<Child> Children { get; private set; }
public AddChild(Child child) {
child.Parent = this;
Children.Add(child);
}
Ребенок:
public Parent Parent { get; set; }
Вы также можете сделать Children IEnumerable и использовать вспомогательное поле IList, но затем вам нужно указать nHibernate, как получить доступ к вспомогательному полю. Это позволяет добавлять дочерние элементы только через метод AddChild ().