我在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} );
但我不知道究竟是什么。
答案 0 :(得分:2)
无法将导航属性用作主键属性(无论是否为复合属性)。关键属性必须具有基本类型 - 如int
或string
或Guid
等。
答案 1 :(得分:0)
正如Slauma描述的那样,如果不引入原始的FK属性,就不可能做我想做的事。
所以我决定使用我的映射实体和普通的POCO一样 - 用
继承基类public int Id {get;set;}
声明并将其用作PK。
此外,在其他来源中,建议遵循以下原因:结构感:当您将简单映射(2个FK)转换为复杂映射(2FK +自定义字段)时,它将成为项目中的任何其他普通实体,并且应该具有相同的约束和结构。