Entity framework 无密钥属性的复合PK

Entity framework 无密钥属性的复合PK,entity-framework,entity-framework-5,composite-primary-key,Entity Framework,Entity Framework 5,Composite Primary Key,我首先在EF5项目的代码中使用手动映射实体,并希望使用FKs作为复合PK。我在映射类(不是FK)中只有导航属性,如下所述: class MyMapping { public virtual Mapped1 {get;set;} public virtual Mapped2 {get;set;} } 我不想添加像“int-Mapped1FK”/“int-Mapped2FK”这样的字段,但在这种情况下我找不到如何指定复合键 我认为应该是这样的: modelBuilder.Entity<

我首先在EF5项目的代码中使用手动映射实体,并希望使用FKs作为复合PK。我在映射类(不是FK)中只有导航属性,如下所述:

class MyMapping
{
  public virtual Mapped1 {get;set;}
  public virtual Mapped2 {get;set;}
}
我不想添加像“int-Mapped1FK”/“int-Mapped2FK”这样的字段,但在这种情况下我找不到如何指定复合键

我认为应该是这样的:

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

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

但我不知道什么是正确的。

不可能将导航属性用作主键属性(无论是否为复合属性)。键属性必须具有基本类型-如
int
string
Guid
等。

如Slauma所述,如果不引入基本FK属性,就不可能实现我想要的功能

所以我决定像处理普通POCO一样处理映射实体-使用

public int Id {get;set;}
声明并将其用作PK


另外,在其他来源中,由于架构的原因,建议使用以下方法:将简单映射(2个FKs)转换为复杂映射(2个FKs+自定义字段))它与项目中的任何其他实体一样成为普通实体,并且应该具有相同的约束和结构。

我假设EF在我指定(例如)一对一关系时,仅使用导航属性透明地创建基本属性?这就是我所问的情况。@AlexG.P:是的,外键属性是这样,但主键属性不是这样。如果其中一个外键同时是主键(或主键的一部分),则必须在模型中将此FK作为基本体属性公开。您不能再单独使用导航属性。
public int Id {get;set;}