StaleStateException при изменении идентификатора в nhibernate - PullRequest
0 голосов
/ 27 июля 2010

Очень новый для NHibernate, так что я надеюсь, что здесь будет быстрое решение.

Код, на который я смотрю, имеет неортодоксальный дизайн.

public class Partner
{
    public virtual int Id { get; set;} //note the set is not private
    public virtual String Name { get; set;}
}

и сопоставляется с Automappings FluentNhibernate

Когда создается Partner, его идентификатор равен 0, но когда Я призываю Флеш, чтобы сохранить БД:

        CurrentSession.SaveOrUpdate(obj);
        CurrentSession.Flush();

Я получаю Unexpected row count: 0; expected: 1 StaleStateException

Я предполагаю, потому что NHibernate не любит, когда я меняю первичный ключ, ID. В этом случае мне нужно. Как я могу настроить NH, чтобы позволить мне достичь этой мерзости?

1 Ответ

1 голос
/ 27 июля 2010

Вы можете выполнить обновление с помощью HQL:

session.CreateQuery("update Partner set Id = :newId where Id = :oldId")
       .SetParameter("newId", newId)
       .SetParameter("oldId", oldId)
       .ExecuteUpdate();

Я предлагаю вам Evict объект из сеанса или использовать объект без состояния, если вы собираетесь обновить Id.

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