【问题标题】:Entity Framework - Foreign Key name实体框架 - 外键名称
【发布时间】:2015-11-06 19:14:00
【问题描述】:

我在使用代码优先方法创建外键时遇到了一些问题。

这是我的UserTable

public class UserTable
{
    //USERNAME
    [Key]
    public string Username { get; set; }

    //NAVIGATION PROPERTY
    public virtual ICollection<AuctionTable> Auctions { get; set; }

}

这是我的AuctionTable

public class AuctionTable
{
        //AUCTION ID
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Key]
        public int AuctionId { get; set; }

        //NAVIGATION PROPERTY
        public string Seller { get; set; }
        public virtual UserTable Users{ get; set; }
}

卖家应该是我的 FK,但程序似乎只有在我将其重命名为“Username”(另一个表的主键)时才能识别它。

我尝试过使用外键标签[ForeignKey("UserTable")] 而不是Seller,但没有成功。

你有什么建议吗?

【问题讨论】:

    标签: mysql sql-server entity-framework foreign-keys


    【解决方案1】:

    将此作为您的 AuctionTable:

    public class AuctionTable
    {
        //AUCTION ID
        [Key]
        public int AuctionId { get; set; }
    
        //NAVIGATION PROPERTY
        public string Seller { get; set; }
        [ForeignKey("Seller")]
        public virtual UserTable Users { get; set; }
    }
    

    【讨论】:

      【解决方案2】:

      Code First 有一组或规则应用于在发现关系时尝试定位外键属性。规则基于属性的名称。如果外键属性命名为[Target Type Key Name][Target Type Name] + [Target Type Key Name][Navigation Property Name] + [Target Type Key Name].,则将按约定发现外键属性。您添加的Seller 属性与这三个规则中的任何一个都不匹配。将ForeignKey 属性添加到Seller FK 属性,以及告诉它哪个导航属性表示它是外键的关系的信息,将解决问题:

      public class AuctionTable
      {
          [Key]
          public int AuctionId { get; set; }
      
          [ForeignKey("User")]
          public string Seller { get; set; }
      
          public virtual UserTable User { get; set; }
      }
      

      或者,您可以将ForeignKey 注释应用于导航属性(正如@Andy 在他的回答中显示的那样)并告诉它哪个属性是关系的外键。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多