2010-03-11 4 views
1

У меня есть эти классы:NHibernate каскадное удаление из другой коллекции сущностей

public class User 
{ 
    public IList<Order> LastOrders { get; set;} 
} 

public class Order {} 

Где LastOrders это много-ко-многим карте.

Как сообщить (свободно) NHibernate удалить заказ из коллекций LastOrders для всех пользователей, когда я удалю заказ? Является ли это возможным?

То есть (дБ сохранить/код загрузки пропущено)

user.LastOrders.Add(order); 
Session.Delete(order); 
Assert(!user.LastOrders.Contains(order)); 

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

ответ

0

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

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

HasManyToMany(x => x.LastOrders) 
    .NotFound.Ignore(); 

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

+0

Да, но я буду получать сиротские записи в этом случае в таблице многих ко многим? – queen3

+0

Хорошо, вы уверены, что осиротевшие строки будут игнорироваться NH? Что делать, если он вставляет новую пару «многие-ко-многим» с одинаковыми идентификаторами (если это возможно), а затем читает назад - будет ДВА одинаковых результатов, и я не уверен, что NH ожидает этого. Во всяком случае, это не похоже на чистое решение для меня. – queen3

Смежные вопросы