NHibernate - обновление полей идентичности - PullRequest
1 голос
/ 21 июня 2009

Можем ли мы обновить поля Id в NHibernate следующим образом?

MyClass myObj = MyClass.Retrieve(1);

myObj.Id = 999;
myObj.Name = "name name";
myObj.Value = 1000;

MyClass.Update(myObj);

Ответы [ 4 ]

4 голосов
/ 21 июня 2009

Вы никогда не должны изменять идентификатор (первичный ключ) для существующего объекта. В NHibernate вы должны назначать идентификатор новым объектам только в том случае, если вы сопоставили генератор как «назначенный». Если вы намереваетесь клонировать существующий объект, затем извлеките объект и создайте клон в качестве нового экземпляра, чтобы назначить новый идентификатор.

2 голосов
/ 21 июня 2009

Вы можете закрыть сеанс, выполнить raw sql, чтобы изменить первичный ключ, а затем открыть новый сеанс. это единственное, что работает, так как nhibername полагается на первичный ключ. никогда никогда не сможет заставить nhibernate сделать это.

2 голосов
/ 21 июня 2009

Примерно так будет работать:

ISession.Delete(yourClass);
yourClass.Id = somethingelse;
ISession.Save(yourClass);

Почему вы хотите изменить Идентификатор? Это звучит как очень плохая вещь.

1 голос
/ 02 марта 2016

Мне пришлось добавить Evict после удаления, затем работать.

Примерно так будет работать:

    ISession.Delete(yourClass);
    yourClass.Id = somethingelse;
    ISession.Save(yourClass);

Почему вы хотите изменить Идентификатор? Это звучит как очень плохая вещь.

Вот что я сделал:

ISession.Delete(yourClass);
ISession.Evict(yourClass);
yourClass.Id = somethingelse;
ISession.Save(yourClass);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...