Fluent API 从具有复合主键的查找 table 映射到另一个 table

Fluent API Map from a lookup table with a composite primary key to another table

我有一个带有复合主键的 class,用作 3 个不同 table 的查找 table。因此,主键是 3 个对应外键的组合。

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

这里是查找 table 映射

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 作为外键映射到另一个 table,但它不起作用。

我正在尝试使用它来映射它

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

但是没用。

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

我收到

的消息
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'.

我应该如何做映射?

如果您想映射复合主键,您应该使用语法...

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

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

您不能将复合键的一个属性用作外键目标,因为它不是唯一的。如果你想让一个实体只引用 ItemID,你必须创建一个指向 table 的外键,其中 ItemID 是主键(我认为 Item ).