Я работал над отображением «многие ко многим» для объекта, который я назвал «Задачей».Задача может иметь много детей и много родителей.Между ними есть таблица соединений, в которой есть только два столбца FK: «ParentTaskId» и «ChildTaskId».Вот то, что я придумал до сих пор.
// Many-to-Many Parents
HasManyToMany<Task>(x => x.Parents)
.Table("TaskDependency")
.ParentKeyColumn("ParentTaskId")
.ChildKeyColumn("ChildTaskId")
.Inverse()
.Not.LazyLoad()
.Cascade.SaveUpdate();
// Many-to-Many Children
HasManyToMany<Task>(x => x.Children)
.Table("TaskDependency")
.ParentKeyColumn("ChildTaskId")
.ChildKeyColumn("ParentTaskId")
.Not.LazyLoad()
.Cascade.SaveUpdate();
А вот пример кода, который поможет мне проиллюстрировать мой вопрос.Приведенный ниже код работает:
_taskRepository.Save(_taskVendor);
_taskRepository.Save(_taskClientVendor);
_taskRepository.Save(_taskClient);
_taskVendor.Children.Add(_taskClientVendor);
_taskClientVendor.Children.Add(_taskClient);
_taskRepository.Save(_taskVendor);
_taskRepository.Save(_taskClientVendor);
_taskRepository.Delete(_taskVendor);
_taskRepository.Delete(_taskClientVendor);
_taskRepository.Delete(_taskClient);
Но если я изменю порядок операторов удаления на:
_taskRepository.Delete(_taskVendor);
_taskRepository.Delete(_taskClient);
_taskRepository.Delete(_taskClientVendor);
, я получу нарушение ограничения fk в моей таблице соединений ко многим и многим.Я думаю, что это связано с тем, как я настроил обратное в моем отображении.Это влияет на порядок, в котором выполняются запросы, чтобы избежать этой точной проблемы ограничения fk.Есть ли способ сопоставить это так, чтобы я мог удалить объекты на любой стороне, дочернем или родительском, не имея этого исключения?Я попробовал инверсию с обеих сторон моего отображения, но это просто привело к тому, что мои отношения многие ко многим не спаслись.> _ <</p>
Любая помощь будет принята с благодарностью.