Entity framework EF6外键定义

Entity framework EF6外键定义,entity-framework,Entity Framework,如我所知,为了定义外键,我只引用如下所述的字段: 但对我来说,这种方法不起作用,我需要使用如下代码: [ForeignKey("MyFkName")] public virtual ForeignKeyTable ForeignKeyProperty { get; set; } public int? MyFkName{ get; set; } 请问我做错了什么?错误是您忘记声明您的作者财产虚拟 // a Book belongs to exactly one Author using For

如我所知,为了定义外键,我只引用如下所述的字段:

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

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

请问我做错了什么?

错误是您忘记声明您的作者财产虚拟

// 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;}
//每个作者都有零本或多本书:
公共ICollection图书{get;set;}
这就是通知实体框架您正在建模一对多关系所需的全部内容

您的
作者
属性应该声明为虚拟,这是有道理的。毕竟,您的书没有现成的作者数据作为数据

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


因此,Author属性中的
作者
不是真正的
作者
,而是从
作者
派生的对象,它知道如何从数据库中获取
书籍
作者
数据。

什么不起作用?你的代码没有明显的问题。你添加了Author类并给它一个Id了吗?嗨,如果我只使用:public int MyFkProperty{get;set;}来创建fk,这个表是用一个int列创建的,它不是一个外键OK,当你说“这个方法”时,你到底指的是什么?在我看来,这是第二个代码片段。这“不起作用”,因为EF不能按照名称约定匹配外键的名称和引用。你必须添加一个显式映射。好的,如果我使用公共虚拟作者{get;set;},fk被创建好了。但是,正如我所理解的,作者说导航属性(public virtual author{get;set;})是可选的……我在没有虚拟属性的情况下尝试了它,但它不起作用。正如我所写的,虚拟是有意义的。有时您只需填写Book.Author=newauthor(){…},这意味着作者只是一些数据。但是,如果执行DbSet查询并使用Book.Author,这在内部是一个Linq连接操作。如果不是虚拟的,这就无法工作
// Every Author has zero or more Books:
public ICollection<Book> Books {get; set;}