Самореференционная FK порождающая душу - PullRequest
0 голосов
/ 16 декабря 2010

На скриншоте ниже указан объект (URL) в моей модели. Поле ParentId представляет собой FK, на который ссылаются сами (указывает на Url.Id). Вы можете увидеть эту навигацию внизу скриншота.

alt text

В моем SQL и моей БД, из которых я генерирую EDMX, FK с самоссылкой называется FK_Urls_Parent:

-- Creating foreign key on [ParentId] in table 'Urls'
ALTER TABLE [Urls]
ADD CONSTRAINT [FK_Urls_Parent]
    FOREIGN KEY ([ParentId])
    REFERENCES [Urls]
        ([Id])
    ON DELETE NO ACTION ON UPDATE NO ACTION;

Мои вопросы:

  1. Почему EF генерировал Urls1 и Url1 только из этого одного FK? Url1 - это 0 или 1 свойство, которое является «FromRole» Urls1. Urls1 - это «FromRole» Urls «ToRole» Urls1. Похоже, что EF создает свойство навигации, точно такое же, как таблица Url. Зачем он это делает, и я могу сделать что-то, чтобы он просто сгенерировал желаемое свойство Navigation: Urls1?
  2. Хорошо, не так важно, но могу ли я управлять именем свойства Navigation на основе имени FK или чего-то в БД? Я ненавижу, что это называет это "Url1". Я бы предпочел «Родитель», но не хочу менять его вручную в конструкторе каждый раз, когда я воссоздаю модель.

Спасибо.

1 Ответ

2 голосов
/ 16 декабря 2010

Это моделирование обеих сторон отношений.Другими словами, одним из свойств будет запись, на которую указывает эта запись ParentId.Другой будет запись (записи), чье поле ParentId указывает на эту запись.Вы можете отключить одну сторону в свойствах отношений или переименовать их, чтобы иметь смысл.Например, ParentUrl и ChildUrls.

Я не уверен на 100%, как попасть в диалог отношений свойств, не открывая саму программу, чего я сейчас не могу.Я знаю, что он появляется в (по умолчанию) окне свойств в правом нижнем углу, когда выбрана ссылка.

Поскольку это изменение каким-то образом является постоянным при регенерации модели, я не знаю, как это сделать.,Надеюсь, кто-то еще узнает, потому что это сэкономит мне много времени!

...