2009-07-20 5 views
11

Отказ от ответственности: Я Noobie NHibernate так что надеюсь, этот вопрос имеет смысл у меня есть много-ко-многим между двумя классами что-то вроде ...NHibernate Каскад = сохранить-обновление "

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; 
} 

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

ответ

25

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

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

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