2015-10-17 126 views
0

我有一个类为关键的导航属性

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


    public Int64 fooProp1{ get; set; } 

    public DateTime fooProp2{ get; set; } 
} 

当我这样做迁移它给我的错误是“没有定义键”但我有已经加入的关键attonation。我意图是使被引用的实体“fooRefClass”作为主键以及外键,我知道有一种方法是通过提及被引用实体的属性ID并在那里写入外键注释,但是我想处理实体直接,而不是唯一的id,我如何获得这个功能,请帮我解决这个问题。

+0

工作人员是一个导航物业!它甚至不会出现在桌子上!当然,如果它不在数据库中,则不能将其设置为密钥。创建一个外键属性并使用它。 – DevilSuichiro

+0

我有一个fooRefClass实体作为不同的类,并且ef为相同的表创建了一个表,如果我为其他某个属性创建密钥,则ef创建fk的相同的 –

+0

,这并没有任何意义...只需添加FK属性到fooRefClass并将其定义为键+ FK ?! – DevilSuichiro

回答

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;} 
+0

针对我的回应,但我提到的问题,我已经提到了上述解决方案,但我只想处理实体,否则get和post请求json签名会有所不同 –