NHibernate: Могу ли я получить доступ к созданному первичному ключу после сохранения модели? - PullRequest
0 голосов
/ 22 апреля 2010

Итак, у меня есть простая таблица с полем идентификатора, которая постепенно создается в INSERT.

Я настроил отображение в NHibernate, чтобы отразить это:

<id name="ID">
  <generator class="identity" />
</id>

Ивсе работает нормально.

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

var model = new MyModel();
session.SaveOrUpdate(model);

Но на этом этапе model.ID == ноль, а не идентификатор.

Есть идеи?

Энтони

Ответы [ 4 ]

4 голосов
/ 22 апреля 2010

Вам необходимо очистить сеанс, чтобы изменения сохранялись в базе данных.Вы можете сделать это, позвонив по номеру session.Flush() или, что еще лучше, используя транзакцию:

using (var txn = session.BeginTransaction())
{
    session.SaveOrUpdate(model);
    txn.Commit();
}
1 голос
/ 22 апреля 2010

Насколько я понимаю, идентификаторы генерируются базой данных, и поскольку SaveOrUpdate () фактически не сохраняет вашу модель, идентификатор будет нулевым. Это должно измениться, как только вы зафиксируете содержимое вашего сеанса в БД.

0 голосов
/ 27 февраля 2013

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

var model = new MyModel();

var id = session.Save(model);
// or
session.SaveOrUpdate(model);
var id = model.Id;
0 голосов
/ 22 апреля 2010

Если вы установите Name свойство в отображениях, тогда NHibernate установит Id для вас после того, как сохранит сущность

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