В активной записи замка, почему я должен использовать CreateAndFlush, когда моя сессия должна была закончиться? - PullRequest
1 голос
/ 13 февраля 2012

У меня есть очень простое веб-приложение asp.net mvc, которое использует активную запись замка поверх MySql.

Пользователи приложения хотят теперь определить первичный ключ для одного из объектов вручную (это было значение по умолчанию для автонумерации). Нет проблем, я подумал, я просто изменю атрибут первичного ключа с [PrimaryKey] на [PrimaryKey (PrimaryKeyType.Assigned)] и изменим схему базы данных (хорошо, я знаю, что это можно считать некорректным подходом, но это не главное в этом вопросе)

После этого новые сущности никогда не будут сохраняться в базе данных при вызове их метода .Create(), хотя я создаю сессионную область для запроса в OnBeginRequest и OnEndRequest, используя код, идентичный здесь . Тот же код работал нормально, прежде чем я изменил атрибут [Primary Key].

Если я вызываю .CreateAndFlush () вместо Create (), сущности сохраняются в БД. Я думал, что изменения в Create () будут сохраняться после завершения сеанса. Почему они ... я не понимаю, как это должно работать?

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Для сгенерированного ключа ActiveRecord знает, что 0 / NULL / {0000-0000-0000-0000} / и т.д.являются значениями empyt и что объект является временным и должен быть создан.Он не знает, что PrimaryKey назначен.Но вы можете сказать ActiveRecord, что такое пустое значение, просто используйте следующий названный параметр для вашего PrimaryKeyAttribute.

[PrimaryKey(PrimaryKeyType.Assigned, UnsavedValue="")]

Greeetings Juy Juka

0 голосов
/ 21 февраля 2012

Оказалось, что пебчак. Я забыл, что написал некоторый код, который проверяет, что новый первичный ключ не существует. Этот код, конечно, нуждался в собственной сессионной области. Как только я это сделаю, все будет работать, то есть вызов .create сохранит объект в БД.

Из этого извлечены два урока:

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