EF6外键定义

时间:2017-10-16 13:13:35

标签: entity-framework

如我所知,要定义外键,我只引用this text中解释的字段:

   public class Book
{
    public int Id { get; set; }
    [Required]
    public string Title { get; set; }
    public int Year { get; set; }
    public decimal Price { get; set; }
    public string Genre { get; set; }

    // Foreign Key
    public int AuthorId { get; set; }
    // Navigation property
    public Author Author { get; set; }
}

但对我来说这种方法不起作用,我需要使用这样的代码:

[ForeignKey("MyFkName")]
public virtual ForeignKeyTable ForeignKeyProperty { get; set; }
public int? MyFkName{ get; set; }

我做错了什么?

1 个答案:

答案 0 :(得分:1)

错误是您忘记声明作者属性虚拟;

// a Book belongs to exactly one Author using Foreign Key:
public int AuthorId {get; set;}
public virtual Author Author {get; set;}

此外,您的作者应该参考它拥有的图书:

// Every Author has zero or more Books:
public ICollection<Book> Books {get; set;}

这是告知实体框架您正在建模一对多关系所需的全部内容

您的Author属性应该被声明为虚拟有意义。毕竟,您的图书没有作为数据随时可用的作者数据。

在寻址Book.Author中的一个属性时,实体框架必须创建连接查询而不是返回数据。

因此,作者属性中的Author不是真正的Author,而是来自Author的对象,它知道如何获取Author的{​​{1}}数据来自数据库的{1}}。