NHibernate;основы двунаправленного 1: m, m: m и List / IList - PullRequest
0 голосов
/ 05 февраля 2011

Мое понимание List vs IList и других коллекций довольно ограничено, поэтому мне нужно спросить:

Документация NHibernate говорит:

Обратите внимание, чтоNHibernate не поддерживает двунаправленные связи «один ко многим» с индексированной коллекцией (списком, картой или массивом) в качестве конца «много», вы должны использовать набор или суммирование.

реализация класса ниже уважать это ограничение?Другими словами;Достаточно ли объявить свойство как IList, в то же время инициализируя как конкретный список?Или мне нужно использовать другой тип коллекции?

А можно ли использовать конкретную реализацию любого контейнера, или это должен быть интерфейс?

Пример взят из FluentNHibernate учебник , поэтому я предполагаю, что это будетвсе будет в порядке, но я хотел бы понять это более глубоко, чем просто принять это на этой основе.

public class Store
{
  public virtual int Id { get; private set; }
  public virtual string Name { get; set; }
  public virtual IList<Product> Products { get; set; }
  public virtual IList<Employee> Staff { get; set; }

  public Store()
  {
    Products = new List<Product>();
    Staff = new List<Employee>();
  }

  public virtual void AddProduct(Product product)
  {
    product.StoresStockedIn.Add(this);
    Products.Add(product);
  }

  public virtual void AddEmployee(Employee employee)
  {
    employee.Store = this;
    Staff.Add(employee);
  }
}

1 Ответ

2 голосов
/ 05 февраля 2011

Пока вы отображаете его как bag, это нормально.

Имейте в виду, что NHibernate заменит ваше List на PersistentGenericBag при сохранении / загрузке, поэтому всегда программируйте для интерфейса.

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