无法在Code First中获取使用外键的属性名称

时间:2014-04-02 22:20:42

标签: c# entity-framework ef-code-first code-first

我已经提供了一个数据库,我需要为其设置Code First。我认为我已经完成了,我现在遇到的问题是我想更改实体中的一些外键名称以使其更有意义。

让我们说我有两个表,Person和Location,看起来像这样:

Person
------
PersonId int not null (PK)
DefaultLocation int not null (FK)


Location
--------
LocationId int not null (PK)

对于位置实体,我想我已经得到了它:

public class Location
{
    [Key]
    public int LocationId { get; set; }

    [InverseProperty("DefaultLocation")]
    public List<Person> PeopleWithDefault { get; set; }
}

现在,我想要的是在我的Person实体上有2个属性,DefaultLocation导航属性和外键的DefaultLocationId属性。这就是我现在所处的位置:

public class Person
{
    [Key]
    public int PersonId { get; set; }

    [ForeignKey("Location")]
    [Column("DefaultLocation")]
    [Required]
    public int DefaultLocationId { get; set; }

    public virtual Location DefaultLocation { get; set; }
}

这就是这个坏男孩:

  

属性&#39; DefaultLocationId&#39;上的ForeignKeyAttribute在类型&#39;人物&#39;无效。导航属性&#39;位置&#39;在依赖类型&#39; Person&#39;中找不到。 Name值应该是有效的导航属性名称。

所以,这个错误很有意义......我根本不知道如何修复它。我显然错过了某个地方的注释,或者错误地使用了[ForeignKey]。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

将FK属性中的字符串更改为属性的名称,而不是类型的名称:[ForeignKey("DefaultLocation")]

答案 1 :(得分:0)

我也面临类似的问题。 看下面的课程

作者是父表

public class Author
    {
        [Key]
        public int AuthorID { get; set; }
        [Required]
        public string Name { get; set; }
    }

Book将AuthorID作为外键

public class Book
    {
        [Key]
        public int BookId { get; set; }
        [Required]
        public string Title { get; set; }
        public decimal Price { get; set; }
        public string Genre { get; set; }
        public DateTime PublishDate { get; set; }
        public string Description { get; set; }
        public int AuthorID { get; set; }
        [ForeignKey("AuthorID")]
        public virtual Author Author { get; set; }
    }

我刚刚更新了我的代码并在下面添加了虚拟

[ForeignKey("AuthorID")]
 public virtual Author Author { get; set; }

所以基本上在书中我有来自作者的相同属性

public int AuthorID { get; set; }

还有一个类型为Author

的虚拟属性
[ForeignKey("AuthorID")]
 public virtual Author Author { get; set; }

希望这会有所帮助。