NHibernate: необходимо обновить идентификатор объекта с @@ идентификатором после вставки - PullRequest
1 голос
/ 28 мая 2009

Я впервые использую NHibernate и изо всех сил. На первой странице я запускаю форму. Я хочу сохранить и перейти ко второй странице. Как мне обновить мой объект RequestForm с помощью идентификатора недавно вставленной строки? При вызове перенаправления все равно 0, хотя данные были сохранены в БД.

Вот мой код контроллера:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult New(RequestForm form)
    {
        // contract
        if (form == null)
        {
            throw new ArgumentException("Cannot be null", "form");
        }

        // validate the form
        form.Validate(ModelState);

        // if valid, save & continue
        if (ModelState.IsValid)
        {
            var request = new Request();
            form.Update(request);
            repository.Save(request);
            return RedirectToAction("Edit", "Request", new {id = form.ID});
        }

        // if not valid, return new form
        return View("New", form);
    }

Вот код репозитория:

    public void Save(T entity)
    {
        using (ISession session = GetSession())
        using (ITransaction transaction = session.BeginTransaction())
        {
            session.SaveOrUpdate(entity);
            transaction.Commit();
        }
    }

Вот соответствующая область файла сопоставления:

<class
  name="Request"
  table="Data_Requests"
  dynamic-update="true">

<id 
  name="Id" 
  type="Int32" 
  access="property"
  column="RequestId"
  unsaved-value="0">
  <generator class="native"/>
</id>

Спасибо, что прочитали мой вопрос. Я уверен, что ответ прост, если вы знаете, что делаете:)

Ответы [ 2 ]

0 голосов
/ 28 мая 2009

ОК - тупая ошибка

return RedirectToAction("Edit", "Request", new {id = form.ID});

Должно быть

return RedirectToAction("Edit", "Request", new {id = request.ID});
0 голосов
/ 28 мая 2009

Вы пробовали установить <generator class="identity"/>. Должно работать с родным, но кто знает ...

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