таблица на иерархию со ссылками на один и тот же родительский тип: удаления каскадируются по другому типу подкласса - PullRequest
1 голос
/ 20 ноября 2011

У меня есть общий суперкласс (предположим, что он Employee), который имеет (среди прочих) подклассы Engineer и Salesman.
Структура таблицы классов Employee моделируется с использованием таблицы наиерархия.

A Department объект ссылается как на продавцов, так и на инженеров:

public class Department
    {
        public IEnumerable<Engineer> Engineers { get; set; }
        public IEnumerable<Salesman> Salesmen { get; set; }
    }

Проблема возникает, когда я очищаю коллекцию Engineer s от Department:

  • Когда оба отношения отображаются с помощью cascade=none или cascade=all (на стороне Department), тогда все записи Salesman получают свой внешний ключ со значением NULL (здесь это оператор, сгенерированный nHib: UPDATE dbo.Employee SET Department_id = Null WHERE Department_id = @p0;.
  • Когда оба отношения отображаются с помощью cascade=all-delete-orphan, тогда я получаю ObjectDeletedException, ссылаясь на совершенно другую коллекцию объекта Department (не могу понять это)
  • при сопоставлении с cascade=all или cascade=none и таблицей для стратегии подкласса все кажется работоспособным
  • при сопоставлении с cascade=all-delete-orphan и таблицей на подкласс *Стратегия 1037 *, я снова получаю ObjectDeletedException, ссылаясь на совершенно другую коллекцию объекта Department

, очевидно, мне не хватает некоторого базового nHib здесь ... но что это?

1 Ответ

0 голосов
/ 20 ноября 2011

duhh .... inverse=true в родительском классе для этих коллекций.
все еще не уверен, что вызвало это, казалось бы, не связанное ObjectDeletedException хотя ...

...