NHibernate Cascade = save-update "?

Отказ от ответственности: я - NHibernate noobie, поэтому, надеюсь, этот вопрос имеет смысл. У меня есть отношение "многие ко многим" между двумя классами, что-то вроде...

public class Entity1
{
    public virtual Guid EntityId { get; set; }
    public virtual IList<Entity2> Entity2List;
} 

Public class Entity2
{
    public virtual Guid EntityId { get; set; }
    public virtual IList<Entity1> Entity1List;
}

Ive добавил отношения "многие ко многим" с сумкой в ​​обоих сопоставлениях классов, определяя таблицу ассоциаций, но я не уверен, какой вариант каскада использовать. Я хочу иметь возможность создать новый экземпляр Entity1, добавить в его список новый экземпляр Entity2, вызвать "Сохранить", и оба будут вставлены в базу данных (и наоборот). При удалении сущности он должен удалять любые ассоциации с дочерними объектами, но не сам дочерний объект. Должен ли я использовать cascade = "save-update"?

Ответ 1

Да. Похоже, что "save-update" - это то, что вы хотите в этом случае.

Я никогда не нашел подробного объяснения каждого варианта каскада в документации, но использовал этот сообщение в блоге от Ayende в качестве ссылки.

  • none - не делайте никаких каскадов, позволяйте пользователям самостоятельно обрабатывать их.
  • сохранить-обновить - когда объект будет сохранен/обновлен, проверьте ассоциации и сохраните/обновите любой требующий его объект (включая сохранение/обновление ассоциаций во многих сценариях).
  • удалить - при удалении объекта удалите все объекты в ассоциации.
  • delete-orphan - при удалении объекта удалите все объекты в ассоциации. В дополнение к этому, когда объект удаляется из ассоциации и не связан с другим объектом (осиротевшим), также удаляйте его.
  • all - когда объект сохраняет/обновляет/удаляет, проверяет ассоциации и сохраняет/обновляет/удаляет все найденные объекты.
  • all-delete-orphan - когда объект сохраняет/обновляет/удаляет, проверьте ассоциации и сохраните/обновите/удалите все найденные объекты. В дополнение к этому, когда объект удаляется из ассоциации и не связан с другим объектом (осиротевшим), также удаляйте его.