Свободный NHibernate - каскадное удаление дочернего объекта, когда в модели не существует явных отношений родитель-потомок - PullRequest
3 голосов
/ 23 апреля 2010

У меня есть приложение, которое отслеживает (для примера), какие напитки доступны в данном ресторане. Моя модель домена выглядит так:

class Restaurant {
    public IEnumerable<RestaurantDrink> GetRestaurantDrinks() { ... }
    //other various properties
}

class RestaurantDrink {
    public Restaurant Restaurant { get; set; }
    public Drink { get; set; }
    public string DrinkVariety { get; set; }  //"fountain drink", "bottled", etc.
    //other various properties
}

class Drink {
    public string Name { get; set; }
    public string Manufacturer { get; set; }
    //other various properties
}

Моя БД-схема (я надеюсь) о том, что вы ожидаете; «RestaurantDrinks» - это, по сути, таблица соответствия между ресторанами и напитками с некоторыми дополнительными свойствами (например, «DrinkVariety»).

Используя Fluent NHibernate для настройки сопоставлений, я установил отношение «HasMany» от Restaurants к RestaurantDrinks, которое приводит к удалению последнего при удалении родительского ресторана.

У меня вопрос, учитывая, что у «Напитка» нет какого-либо свойства, которое явно ссылается на RestaurantDrinks (связь существует только в базовой базе данных), могу ли я установить отображение, которое приведет к удалению RestaurantDrinks, если их связанный Напиток удален?

Обновление: Я пытался настроить отображение с конца "RestaurantDrink", используя

References(x => x.Drink)
    .Column("DrinkId")
    .Cascade.All();

Но, похоже, это не работает (я все еще получаю нарушение FK при удалении Напитка).

1 Ответ

3 голосов
/ 26 апреля 2010

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

...