没有键属性的复合PK

时间:2013-01-08 15:53:48

标签: entity-framework entity-framework-5 composite-primary-key

我在EF5项目的Code First中使用手动映射实体,并希望将FK用作复合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<MyMapping>()
  .HasKey(k => { k.Mapped1, k.Mapped2} );

但我不知道究竟是什么。

2 个答案:

答案 0 :(得分:2)

无法将导航属性用作主键属性(无论是否为复合属性)。关键属性必须具有基本类型 - 如intstringGuid等。

答案 1 :(得分:0)

正如Slauma描述的那样,如果不引入原始的FK属性,就不可能做我想做的事。

所以我决定使用我的映射实体和普通的POCO一样 - 用

继承基类
public int Id {get;set;}

声明并将其用作PK。

此外,在其他来源中,建议遵循以下原因:结构感:当您将简单映射(2个FK)转换为复杂映射(2FK +自定义字段)时,它将成为项目中的任何其他普通实体,并且应该具有相同的约束和结构。