【问题标题】:Primary Key based on Foreign Keys EF基于外键EF的主键
【发布时间】:2015-12-22 17:02:41
【问题描述】:

一开始我已经尝试过,如下所示,但仍然没有结果:

这是我的实体:

public class Passage
{
        [Key, ForeignKey("FromID")]
        public Localization From { get; set; }

        public int ToID { get; set; }

        [Key, ForeignKey("ToID")]
        public Localization To { get; set; }

        [Required]
        public string HourForm { get; set; }

        [Required]
        public string HourTo { get; set; }

        [Required]
        public int Seats { get; set; }

        [Required]
        public char Weekend { get; set; }

        public int? AdditinalTime { get; set; }

        public int FromID { get; set; }
}

我正在尝试基于两个外键创建主键。有错误

EntityType 'Passage' 没有定义键。定义此 EntityType 的键。

我做错了什么?

【问题讨论】:

    标签: sql-server entity-framework ef-code-first


    【解决方案1】:

    直接引用您的第一个链接:

    “主键始终必须由实体类中的标量属性定义。不能仅通过导航属性来引用 PK。”

    因此,您需要将关键属性放在标量值上,而不是导航属性上。

    public class Passage
    {
        [Key, ForeignKey("From"), Column(Order = 0)]
        public int FromID { get; set; }
    
        public Localization From { get; set; }
    
        [Key, ForeignKey("To"), Column(Order = 1)]
        public int ToID { get; set; }
    
        public Localization To { get; set; }
    }
    

    【讨论】:

      【解决方案2】:

      正如引用的links 之一所说,您需要使用Column 属性来指定您的composite keys 的顺序:

      public class Passage
      {
          [Key,Column(Order=0), ForeignKey("From")]
          public int FromId { get; set; }
      
          [Key,Column(Order=1), ForeignKey("To")]
          public int ToId { get; set; }
          //...
      }
      

      我现在注意到您在导航属性上使用这些属性,正如@PaulAbbott 在他的回答中所说,必须使用 标量属性 定义主键,在这种情况下是 FK 属性。

      【讨论】:

        猜你喜欢
        • 2020-09-28
        • 1970-01-01
        • 2012-02-15
        • 2015-07-16
        • 2020-10-03
        • 1970-01-01
        • 1970-01-01
        • 2013-05-12
        • 1970-01-01
        相关资源
        最近更新 更多