如我所知,要定义外键,我只引用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; }
我做错了什么?
答案 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}}。