NHibernate отказывается обновить объект - PullRequest
0 голосов
/ 16 сентября 2010

Мы запускаем веб-сервисы, которые вызываются для заполнения и обновления нашей базы данных, в одной из функций, которую get EntityReactionType заполняет вызывающей стороне веб-сервиса с идентификаторами.

EntityReactionType имеет составной много-один ключ, состоящий из Entity и (suprise) ReactionType.

Эти идентификаторы заполняются правильными значениями, и затем я хочу обновить объект из базы данных, чтобы проверить некоторые значения, которые установлены в базе данных, кромеПользователь не знает о.В этом случае: IsStart и IsClosing.

Я делаю все это с помощью следующего кода: (это упрощенный фрагмент кода, но идея должна быть ясна)

Я вижу обновление, выполняющее SQL,это правильно и показывает, что это IsStart = False и IsClosing = True.

Тем не менее, когда я смотрю на значения объекта после Refresh IsStart = null и IsClosing = False;

//entityReactionTypeRepository.Merge(reaction.EntityReactionType); 
entityReactionTypeRepository.Refresh(reaction.EntityReactionType);

if (reaction.IsResolved == true || reaction.EntityReactionType.CloseDispute == true)
{
     reaction.IsResolved = true;
     reaction.Invoice.IsDisputed = false;
} 

Я закомментировал строку Merge, так как это то, что я нашел при поиске в Google, но ничего не изменил (идея состояла в том, что вы не можете обновить что-то, что не является транзитивным, но ничего не изменилось, SQL get все равно выполняется, но значения не обновляются)

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

Привет,

Folkert

1 Ответ

0 голосов
/ 23 сентября 2010

Что ж, сегодня я вновь обратился к этой проблеме, и я думаю, что понимаю, почему он это сделал, мне кажется, когда я вызвал Refresh, он сохранил исходные значения, потому что в моем коде перед обновлением я также сделал объект Invoice презентативным. Сам счет не имеет EntityReactionTypes, но в графе объектов он ссылается на него.

По этой причине, по-моему, сеанс решает сохранить значения в том виде, в каком они есть в постоянной версии счета.

Итак, я сделал это обновление в верхней части метода, и оно начало работать так, как раньше, и фактически извлекало значения из базы данных.

Мне кажется странным, что это не изменит значения свойств, когда я выполню обновление, но это то, что он сделал для меня.

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