【问题标题】:Fluent API Map from a lookup table with a composite primary key to another tableFluent API Map 从具有复合主键的查找表到另一个表
【发布时间】:2015-01-08 20:25:08
【问题描述】:

我有一个带有复合主键的类,用作 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'.

我应该如何进行映射?

【问题讨论】:

  • 只是为了澄清:您要求在不同的表中引用复合键的一部分作为此 Multi 表的 FK,对吗?
  • @GertArnold Gah!这么愚蠢的错误。谢谢,做到了。如果您想将此作为答案,我会标记它。

标签: c# .net entity-framework fluent


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-04-10
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 2019-01-06
    • 2015-12-08
    • 1970-01-01
    相关资源
    最近更新 更多