当前位置: 首页 > 知识库问答 >
问题:

在实体框架中将两个外键定义为主键

汪阿苏
2023-03-14

在实体框架中,我想使用两个外键作为另一个实体类型的主键。

public class CustomerExtensionValue {

    // Values for extended attributes of a customer
    [Key]
    [Column(Order = 0)]
    public Customer Customer { get; set; }

    [Key]
    [Column(Order = 1)]
    public CustomerExtension Extension { get; set; }

    [Required]
    public string Value { get; set; }
}

但是,这会给我一个缺少键的错误。\tSystem. Data. Entity. Edm. EdmEntityType:: EntityType'CustomerExtensionValue'没有定义键。定义此EntityType的键。

我知道我可以定义另外两个属性来保存引用实体类型的主键。Visual Studio是否不够聪明,无法自行使用它们的主键?

共有1个答案

龚招
2023-03-14

主键始终必须由实体类中的标量属性定义。您不能仅通过导航属性引用PKs。在您的模型中,需要这样的定义:

public class CustomerExtensionValue {

    [Key, ForeignKey("Customer"), Column(Order = 0)]
    public int CustomerId { get; set; }

    [Key, ForeignKey("Extension"), Column(Order = 1)]
    public int ExtensionId { get; set; }

    public Customer Customer { get; set; }
    public CustomerExtension Extension { get; set; }

    [Required]
    public string Value { get; set; }
}
 类似资料:
  • 我正在使用实体框架管理我的sql server ce数据库。我希望我的表的主键由其他表的几个外键组成。我希望这样的事情能奏效: 但它会导致以下数据库迁移错误: 票据打印机。Bill::EntityType“Bill”没有定义键。定义此EntityType的键。Bills:EntityType:EntitySet“Bills”基于未定义键的类型“Bill”。 如何使表具有由这三个外键组成的主键?

  • 我有两个表,在我的Spring代码中是学生和课程。我想创建一个关系表,“获取课程”。我只有学生ID和课程ID。我可以在我的java代码中创建一个具有两个主键的表,但我不能将它们声明为外键。 我尝试了这个解决方案,将两个外键作为主键,但没有成功,我认为其中缺少了一些部分。因此,我尝试了基于此解决方案的方法: (学生实体有id, name, surname)(课程实体有id, Coursename)

  • 我的MVC应用程序中有两个实体,我使用实体框架6代码优先的方法填充数据库。学生实体中有两个城市id;其中一个代表出生城市,另一个代表工作城市。当我如上所述定义外键时,将在迁移后在学生表中创建一个名为City\u ID的额外列。是否存在错误或如何定义这些FK?提前谢谢。 学生: 城市:

  • 如何使用hibernate注释实现下表? 当前代码为:(为简洁起见,已删除) 使用者 社交网络 SocialProfile公司 显然我的代码现在不能正常工作。有人能解释一下吗?

  • 我想将类的外键从列表映射到类的主键。实体框架在子问题中没有建立这种关系。 我的形式类。 我的问题课。 IEntityTypeConfiguration中的配置应该是什么样子?

  • 我有一个MasterUserApprovalOfficial实体,它有两个外键,MasterUserId和SoftwareSystemId。EF 7足够聪明,可以看出这两个属性是外键。这是我的MasterUserApprovalOfficial类 如果我查看创建的表,MasterUserId列按预期创建并命名,SoftwareSystemId列然而被创建为(类的名称附加到主键的名称) 有什么原因吗