Fluent API从查找表映射,其中包含复合主键到另一个表

时间:2015-01-08 20:25:09

标签: c# .net entity-framework fluent

我有一个带有复合主键的类,它用作3个不同表的查找表。因此,主键是3个相应外键的组合。

我想使用复合键中的一个键作为另一个表的外键。

这是查找表映射

public MultiMap()
{
    ToTable("multi");
    HasKey(t => t.ParentId);
    HasKey(t => t.AttributeId);
    HasKey(t => t.ItemId);
    Property(t => t.ParentId).HasColumnName("parent_id");
    Property(t => t.AttributeId).HasColumnName("attribute_id");
    Property(t => t.ItemId).HasColumnName("item_id");    
}

我想使用ItemID作为外键映射到另一个表,但它不起作用。

我正在尝试用它来映射它

HasRequired(t => t.ListItem).WithMany().HasForeignKey(t => t.ItemId);

但它不起作用。

我认为这是因为它试图将复合主键映射到外键。这只是一个int。

我收到了

的消息
Multiplicity is not valid in Role 'XXX' in relationship 'XXX'. Because the Dependent Role refers to the key properties, the upper bound of the multiplicity of the Dependent Role must be '1'.

我应该如何进行映射?

1 个答案:

答案 0 :(得分:0)

如果要映射复合主键,则应使用语法...

HasKey(t => new {t.ParentId, t.AttributeId, t.ItemId});

...而不是后来的三个HasKey语句。 Eaxh HasKey语句会覆盖前一个语句。

您不能将复合键的一个属性用作外键目标,因为它不是唯一的。如果您希望实体仅引用ItemID,则必须创建一个外键,其中ItemID是主键(Item我认为)。