自我引用FK奇怪地生成

时间:2010-12-15 23:04:20

标签: c# sql entity-framework auto-generate

在下面的屏幕截图中是我模型中的实体(URL)。 ParentId字段是自引用FK(指向Url.Id)。您可以在屏幕截图的底部看到此导航。

alt text

在我生成EDMX的SQL和我的数据库中,自引用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只从那一个FK生成Urls1和Url1? Url1是0或1属性,它是'FromRole'Urls1。 Urls1是'FromRole'Urls'TorRole'Urls1。好像EF正在制作一个与Url表完全相同的导航属性。为什么会这样做,我可以做些什么来让它生成一个所需的导航属性:Urls1?
  2. 好的,不是那么重要,但是我可以根据FK名称或DB中的某些内容来控制Navigation属性的名称吗?我讨厌把它命名为'Url1'。我更喜欢'Parent',但不希望每次重新生成模型时都必须在设计器中手动更改它。
  3. 感谢。

1 个答案:

答案 0 :(得分:2)

它正在模拟关系的两个方面。换句话说,其中一个属性将是此条目ParentId指向的条目。另一个是ParentId字段指向此条目的条目。您可以在关系属性中禁用一侧,或重命名它们以使其有意义。例如,ParentUrlChildUrls

我不是100%肯定如何在没有自己打开程序的情况下进入属性关系对话框,我现在不能这样做。我知道,当选择链接时,它会出现在(默认情况下)右下角属性窗口中。

就模型再生而言,这种变化在某种程度上是永久性的,我知道无法做到这一点。希望别人知道,因为这样可以节省我很多时间!