Модель данных объекта ADO.NET допускает циклический внешний ключ - PullRequest
1 голос
/ 09 декабря 2008

Я использую новую модель данных сущности ADO.NET для простой базы данных. У меня есть таблица / сущность с первичным ключом (PageID) и внешним ключом ParentID, который ссылается на себя в PageID для отношения родитель / потомок «0..1 ко многим». На странице ASP.Net я использую FormView с asp: DynamicControl, чтобы выразить это как элемент управления. Эта часть работает нормально, за исключением одной важной детали: при отображении страницы список возможных родителей включает сам себя, и установка элемента для родительского элемента не вызывает ошибок и сохраняется в базе данных. Очевидно, что иерархический объект не должен иметь своего родителя, так как мне ограничить это поведение?

Насколько я вижу, мои варианты:

  • Каким-то образом измените ForeignKey _ edit.ascx в шаблонах полей DynamicData. Это проблематично, потому что я не вижу, как получить ссылку на первичный ключ текущего объекта, чтобы удалить его из возможных вариантов выбора чужой . Кроме того, это потенциально может скрыть любые неиерархические использования fkey refs, когда случается столкновение ключей.

  • Сделайте несколько джиггери-покеров PreRender на странице, чтобы попытаться удалить ListItem из визуализированного DropDownList. Это не похоже на правильный путь, поскольку это только исправляет это для рассматриваемой страницы. РЕДАКТИРОВАТЬ: Вот как я решаю это в настоящее время.

  • Какой-то триггер вставки / обновления, чтобы принудительно заставить ParentID иметь нулевое значение, если он совпадает сам по себе. Это нехорошо, потому что оно молча терпит неудачу с точки зрения пользователя.

У кого-нибудь есть лучший способ? Кроме того, дайте мне знать, если мне нужно предоставить более подробную информацию.

-Kelly

1 Ответ

1 голос
/ 18 июля 2009

В итоге я переместил иерархию в таблицу сборки, потому что мне нужно было хранить больше, чем просто отношения родитель / потомок. Это также означало, что я мог сбросить элемент управления DynamicData и использовать более удобный для пользователя TreeView с перетаскиванием на стороне сервера событий (ComponentArt). Из-за характера контроля, ни один элемент не может быть его собственный родитель, так что проблема была спорной. Вау, 7 месяцев - это много времени в моем первом опыте работы с Entity Framework:)

...