【问题标题】:Surprising naming in table with two foreign keys to the same table表中的惊人命名与同一个表的两个外键
【发布时间】:2017-10-13 14:20:36
【问题描述】:

我有以下实体(使用数据库优先创建)。它有两个指向AspNetUser 表的外键。

public partial class Message
{
    public int Id { get; set; }
    public string ToUserId { get; set; }
    public string FromUserId { get; set; }
    public string Message1 { get; set; }
    public bool Viewed { get; set; }
    public System.DateTime TimeStampUtc { get; set; }

    public virtual AspNetUser AspNetUser { get; set; }
    public virtual AspNetUser AspNetUser1 { get; set; }
}

我发现AspNetUser对应FromUserIdAspNetUser1对应ToUserId。这让我很吃惊,因为ToUserId 是在表中定义的第一个,我希望1 被附加到第二个。

我可以为它编写任何一种方式,但如果规则在某种程度上是随机的,那么我就无法为它编写代码。了解规则并知道哪个与哪个外键相关联至关重要。

有人知道这里涉及的规则吗?

【问题讨论】:

  • 不知道。也许按外键约束名称排序?但是无论如何,您都应该在 edmx 设计器中重命名这些生成的属性名称(这将在 edmx 更新后继续存在),那么这真的很重要吗?
  • @GertArnold:我很难弄清楚如何以一种能够在 EDMX 更新中幸存下来的方式做到这一点。特别是因为更新效果不是很好,我通常需要删除所有表并在每次架构更改时重新导入它们。
  • @JonathanWood 你呢?我对数据库优先的体验完全不同。我有很多可以在更新后保留的名称自定义。只要您使用 EDMX 编辑器,通常就可以了。更新主要更新商店模型,而不是概念模型(嗯,不是全部,至少不是类和属性名称)。
  • @GertArnold:从历史上看,从设计师那里更新模型并没有正常工作,产生了有缺陷的结果。所以我养成了删除并重新导入所有表的习惯。它似乎变得更好了,可能比我想象的要好。
  • @JonathanWood 抱歉说得太早了。 Gert 是正确的,它们将在 EDMX 更新后继续存在。

标签: c# asp.net sql-server entity-framework linq


【解决方案1】:

在您的 edmx 中,您可以通过单击属性并更改 Name 来重命名导航属性。这将在 EDMX 更新后继续存在。但是,如果您从 EDMX 中完全删除它,然后再次从数据库中构建它,那么在这种情况下,您将需要再次重命名它。否则,你应该没问题。

【讨论】:

    猜你喜欢
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    相关资源
    最近更新 更多