基于外键EF的主键

时间:2015-12-22 17:02:42

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

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

这是我的实体:

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的密钥。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

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

"主键始终必须由实体类中的标量属性定义。您不能仅通过导航属性来引用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; }
}

答案 1 :(得分:1)

如引用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属性。