Могу ли я использовать IList вместо ISet? - PullRequest
0 голосов
/ 24 декабря 2009

Я не хочу использовать ISet, поскольку это не нативная коллекция.

Могу ли я обойтись без использования IList? Все мои отношения имеют первичные ключи, и всякий раз, когда они этого не делают, я не использую эту коллекцию для изменения базы данных и т. Д. (Родительская коллекция будет обрабатывать любые обновления / каскады БД и т. Д.).

Ответы [ 2 ]

5 голосов
/ 25 декабря 2009

Вы можете использовать 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 ().

4 голосов
/ 25 декабря 2009

Да, NHibernate поддерживает IList, но список - это коллекция, отличная от набора. Если вы хотите сохранить поведение своего приложения таким же и не хотите ссылаться на iesicollections, вы можете использовать System.Collections.Generic.ICollection с реализацией System.Collections.Generic.HashSet. Вам все еще понадобятся ссылки-ссылки, указанные где-то в ваших решениях, потому что от этого зависит Nhibernate.dll.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...