【问题标题】:Self-Referencing FK Generating Strangly奇怪地生成自引用 FK
【发布时间】:2011-05-26 05:55:19
【问题描述】:

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

在我生成 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 'ToRole' Urls1。似乎 EF 正在制作与 Url 表完全相同的导航属性。它为什么要这样做,我可以做些什么让它只生成一个所需的导航属性:Urls1?
  2. 好的,所以没那么重要,但是我可以根据 FK 名称或 DB 中的其他内容来控制 Navigation 属性的名称吗?我讨厌它把它命名为“Url1”。我更喜欢“父级”,但不想每次重新生成模型时都必须在设计器中手动更改它。

谢谢。

【问题讨论】:

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


    【解决方案1】:

    这是对关系双方的建模。换句话说,其中一个属性将是该条目的ParentId 所指向的条目。另一个将是其ParentId 字段指向该条目的条目。您可以禁用关系属性中的一侧,或重命名它们以使其有意义。比如ParentUrlChildUrls

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

    至于在模型重新生成时以某种方式使这种更改永久化,我不知道有什么办法做到这一点。希望其他人会知道,因为这也可以为我节省很多时间!

    【讨论】:

    • 这将是 ChildUrls,因为单个父实体有多个子实体。
    猜你喜欢
    • 2023-03-06
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多