NHibernate: Как добавить список <Product>, который я создал вручную, в Nhibernate? - PullRequest
0 голосов
/ 11 ноября 2010

Я создал список продуктов - т.е. список вручную в коде.

Можно ли с помощью nhibernate отправлять список продуктов и автоматически добавлять детали.

свойство класса продукта - это идентификатор автоматического приращения в базе данных.

Я определил его так:

  public virtual int Id { get; set; }

Но, конечно, это автоматическое добавочное поле в базе данных, так чтоя установил его на объекте (стандартный класс c #) для импорта в базу данных.

Если это возможно.

В моих сопоставлениях он настроен так

<class name="Product">
  <id name="Id" column="ProductID">
    <generator class="assigned" />
  </id>
<property name="Name" />
<more property names are here.............>

Я думаю, что это возможно, но у меня возникли проблемы с пониманием того, как я могу отправить коллекцию моей модели Продукта (Список) в nhibernate для автоматической вставки

Любая помощь действительно ценится

РЕДАКТИРОВАТЬ

Я хотел бы уточнить, что я делаю .. У меня есть класс продукта, который в основном является сущностью.Я создал несколько продуктов, которые находятся в СПИСКЕ, например List

, поэтому с набором продуктов, которые я хотел бы ЗАПАРТИРОВАТЬ, вставьте их в базу данных.

И уточните, что это ProductID базы данных.поле генерируется автоматически, следовательно, что я должен установить для идентификатора класса, так как он будет технически вставлен, и база данных позаботится об этом поле.

вот мое свойство, которое представляет идентификатор в базе данных

  public virtual int Id { get; set; }

Может быть, я должен установить для него обнуляемый INT, а затем я могу установить его в NULL ?????Хотя я предполагаю

Я надеюсь, что объяснил себя немного лучше.

1 Ответ

2 голосов
/ 11 ноября 2010

Обновлено

Полезно думать о NHibernate как о сущности, сохраняющейся на уровне объекта. Это не сильный загрузчик / манипулятор данных (я не знаю, что такое ORM).

Так что, учитывая ваш пример, вы должны вызвать Session.SaveUpdate для каждого элемента в вашем списке. Итак, если у вас есть доступ к объекту NHibernate Session, вы просто вызываете:

foreach(Product p in ProductList){
  Session.SaveOrUpdate(p);
}

Лично я обычно оборачиваю эту логику в хранилище (я обычно использую шаблон хранилища), например, будет что-то вроде этого:

public void SaveOrUpdateAll(IEnumerable<Product> products){
  foreach(Product p in products){
    Session.SaveOrUpdate(p);
  }
}

Что касается вас, второй вопрос: что делать с Id? Это просто, оставьте идентификатор как есть. Тип int не может быть нулевым, поэтому он инициализируется равным 0. Этого достаточно, чтобы сообщить NHibernate, что эта сущность еще не сохранена в базе данных, и она будет добавлена ​​(дополнительный бонус - ваш продукт получит свой Id, установленный автоматически). ключ базы данных после вызова метода SaveOrUpdate.

Интересно, что NHibernate определяет при использовании метода SaveOrUpdate для создания новой записи в базе данных или обновления существующей записи в зависимости от того, является ли этот номер> 0 (т.е. назначен).

Это зависит от правильности вашего отображения, поэтому ваш генератор должен быть следующим:

<generator class="identity" /> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...