3

我在 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} );

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

4

2 回答 2

2

不能将导航属性用作主键属性(无论是否复合)。关键属性必须具有原始类型 - 例如intorstringGuid等。

于 2013-01-08T16:04:51.407 回答
0

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

所以我决定像使用普通 POCO 一样使用我的映射实体 - 继承基类

public int Id {get;set;}

声明并将其用作PK。

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

于 2013-01-09T10:51:03.853 回答