3

我在EF5项目的Code First中使用手动映射实体,并想使用FK作为复合PK。我在测绘类(不FK)唯一的导航属性如下提到:没有关键属性的复合PK

class MyMapping 
{ 
    public virtual Mapped1 {get;set;} 
    public virtual Mapped2 {get;set;} 
} 

我不想添加像“廉政Mapped1FK” /“诠释Mapped2FK”领域,但我怎么也找不到指定组合键在这种情况下。

我认为它应该是这样的:

modelBuilder.Entity<MyMapping>() 
    .HasKey(k => k.Mapped1) 
    .HasKey(k => k.Mapped2); 

modelBuilder.Entity<MyMapping>() 
    .HasKey(k => { k.Mapped1, k.Mapped2}); 

,但我不知道究竟是什么权利。

回答

2

无法将导航属性用作主键属性(无论是否合成)。作为Slauma形容这是不可能做到我想要的东西,而不会引入原始FK属性,如intstringGuid

+0

我认为EF在创建原始属性的情况下,当我指定,例如,一对一的关系,只有导航属性?我就是这样问的。 –

+0

@ AlexG.P .:是的,对于**外键属性**而言是这样,但对于**(主)键属性**则不适用。如果你的一个外键是一个(或一部分)主键,同时你不得不在你的模型中公开这个FK作为原始属性。你不能单独使用导航属性。 – Slauma

0

- 关键属性必须有一个基本类型。

所以我决定用我的映射实体与普通POCO合作 - 继承基类

public int Id {get;set;} 

声明,并以此为PK。

另外,在其他来源中,建议遵循以下原则:由于体系结构认为:将简单映射(2 FK)转换为复杂映射(2FK +自定义字段)时,它将成为项目中的其他任何其他实体应该有相同的约束和结构。