NHibernate on-delete = "каскад" со связями на многих сторонах - PullRequest
1 голос
/ 11 октября 2011

У меня есть такая объектная модель:

  • Folder - простая структура с именем и т. Д.
  • File - сложный объект, содержащий ссылку на Folder, в которойоно содержится.

Папка не знает своих файлов , и я не хочу, чтобы она это знала.Отношение много-к-одному и должно быть известно только на стороне файла.

В любом случае, я хотел бы использовать функцию ON DELETE CASCADE моей базы данных, так что приЯ удаляю папку, я хочу, чтобы все файлы в этой папке автоматически удалялись .Я не могу использовать каскадирование NHibernate, поскольку нет никакой связи между папкой и файлом.

Я знаю, что есть on-delete="cascade" опция для <key> элемента в случае единицаотношение-ко-многим , но я не могу найти его эквивалент для моей модели - когда отношение определено на многих стороне .

Ячто-то не так или мне действительно нужно пройти и удалить все файлы из удаленной папки вручную?

1 Ответ

1 голос
/ 12 октября 2011

Вы можете попытаться сопоставить сторону «один ко многим» с access="noop".Таким образом, вам не нужно свойство в ваших классах, но у вас все еще есть отображение.

В Fluent NHibernate это выглядит примерно так:

HasMany(Reveal.Member<Folder, IEnumerable<File>>("_files"))
   .KeyColumn("column_name")
   .Access.NoOp()
   .Inverse()
   .ForeignKeyCascadeOnDelete();

Примечание: для этого вам нужно_files поле типа IEnumerable<File> в классе Folder (ограничение Fluent NHibernate, может отображать только реально существующие поля или свойства).Но это поле всегда может быть null, оно никогда не будет использовано.

...