使用注释的导航属性键(实体框架)

时间:2015-10-17 05:27:36

标签: entity-framework entity-framework-6 data-annotations

我有一个班级

 public class fooClass
{
     [Key]
    public virtual fooRefClass staff { get; set; }


    public Int64 fooProp1{ get; set; }

    public DateTime fooProp2{ get; set; }
}

当我进行迁移时,它给出了错误,因为“没有键定义”但我已经添加了键语调。我的意图是将引用的实体“fooRefClass”作为主键和外键,我知道那里通过提及被引用实体的属性id并在那里写外键注释是一种方式,但我想直接处理实体,而不是id,我如何才能获得此功能,请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

由于似乎有困惑,我决定也写一个答案。

使用您定义的类,EF会期望像

这样的表
fooClass(bigint fooRefClass_Id, bigint fooProp1, datetime fooProp2);

...这是无效的,因为它没有键列(导航属性上的键注释什么都不做,因为你看,它不会出现在表中......它只会告诉EF与此表存在关系,并且由于您没有提供FK,因此创建了一个用于创建此关系的表。您也无法在当前模型中自己创建这种关系,因为您甚至没有FK ......您将如何访问您不知道的属性,只是它将在某个时刻创建(通常在首次访问数据库时创建模型)。 您必须告诉EF您希望将要创建的属性也是一个键,而不仅仅是外键。你可以通过自己创建属性并告诉EF你想要使用它来做到这一点,例如(我不太熟悉数据注释,我通常使用Fluent API,所以请原谅可能出现的错误)

[Key, Foreign Key(fooRefClass)]
public Int64 StaffId {get; set;}
相关问题