Могу ли я удалить объект, которого нет в кеше?

Я хочу удалить запись из БД, которая не была извлечена из простого запроса. Объект не был извлечен, поэтому его нет в кеше, но я знаю KEY записи из другой операции. Вот что я пробовал:

создайте новую сущность из менеджера:

manager.createEntity(entityNames.book);

установка идентификатора:

bookToDelete().bookID(1);  // bookToDelete is a ko observable from step 1

обновление состояния:

bookToDelete().entityAspect.setDeleted(); 

Когда я сохраняю изменения, эта транзакция не включается в JSON.


person mwill    schedule 06.12.2013    source источник


Ответы (2)


У тебя почти получилось. Вызов entityAspect.setDeleted для сущности "Добавлено" переводит ее непосредственно в состояние "Отсоединено", что фактически удаляет ее из EntityManager и, следовательно, ее нельзя сохранить. Это преднамеренно. Он обрабатывает случай, когда вы создаете объект, а затем удаляете его. В этом случае объект для сохранения отсутствует.

Таким образом, в вашем случае вы должны сделать объект либо «модифицированным», либо «неизмененным», прежде чем вызывать entityAspect.setDeleted. Вы можете сделать это, либо вызвав entityAspect.setUnchanged или entityAspect.setModified перед вызовом entityAspect.setDeleted, либо вы можете вызвать entityAspect.acceptChanges .

Обратите внимание, что вам также нужно будет убедиться, что объект «клон» проходит проверку, и если у вас есть поле параллелизма в объекте, вам также нужно будет установить его соответствующим образом.

ОБНОВЛЕНИЕ 7 декабря

Вы можете создать объект книги в состоянии, помеченном для удаления, за один шаг, как показано ниже:

var book = manager.createEntity(entityNames.book,
            { BookID: 1 },                  // use initializer to set the key
              breeze.EntityState.Deleted);  // creates the entity in the Deleted state

Обязательно инициализируйте его со всеми другими свойствами, необходимыми для того, чтобы сущность прошла проверку и оптимистичный параллелизм на сервере.

Нет проблем, если у вас нет этих чеков. Не уверен, как бы вы получили эти значения, не запрашивая сервер, если бы у вас были такие проверки.

person Jay Traband    schedule 06.12.2013
comment
это два термина, с которыми я еще не знаком с ветерком: объект клонирования и поле параллелизма. Обсуждаются ли они более подробно на сайте бриза? Спасибо - person mwill; 07.12.2013
comment
Я думаю, что параллелизм, а «клон» - это просто мой термин для того, что вы пытаетесь сделать. - person Jay Traband; 07.12.2013

понятно. не могу удалить объект, пока он находится в добавленном состоянии. Я сначала поставил модифицированный. затем установитьудалить. побочек не увидела.

person mwill    schedule 06.12.2013