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

如何首先在Entity Framework 5代码中使用两个外键创建主键?

百里星纬
2023-03-14

我有一个实体,其中主键由其他两个表的两个外键组成。我使用以下配置,但该表是使用两个FK引用生成的。

表:

domain.Entity1
    MorePK (PK, FK, int, not null)
    Entity2_Id (PK, FK, int, not null)
    Entity3_Id (PK, FK, int, not null)
    OtherData (varchar, null)
    Entity2_Id1 (FK, int, null)
    Entity3_Id1 (FK, int, null)

生成于:

public Entity1
{
    public int MorePK { get; set; }
    public int Entity2_Id { get; set; }
    public int Entity3_Id { get; set; }

    public string OtherData { get; set; }

    public virtual Entity2 Entity2 { get; set; }
    public virtual Entity3 Entity3 { get; set; }
}

public Entity2
{
    public int Id { get; set; }
    public virtual List<Entity1> Entity1s { get; set; }
}

public Entity3
{
    public int Id { get; set; }
    public virtual List<Entity1> Entity1s { get; set; }
}

public class Entity1Config : EntityTypeConfiguration<Entity1>
{
    HasKey(k => new { k.MorePK, k.Entity2_Id, k.Entity3_Id });

    HasRequired(p => p.Entity2)
        .WithMany()
        .HasForeignKey(p => p.Entity2_Id);

    HasRequired(p => p.Entity3)
        .WithMany()
        .HasForeignKey(p => p.Entity3_Id);

    Property(x => x.Entity2_Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
    Property(x => x.Entity3_Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}

如果我把台词注释掉

public virtual List<Entity1> Entity1s { get; set; }

在Entity2和Entity3上,它会正确地生成DB,但我认为EF需要导航属性,对吗?获取正确数据库架构的正确方法是什么?

共有1个答案

闻鹤龄
2023-03-14

我想通了!将这个Has很多添加到外部实体配置中:

public Entity2Config : EntityTypeConfiguration<Entity2>
{
    HasMany(x => x.Entity1s)
        .WithRequired(x => x.Entity2)
        .HasForeignKey(x => x.Entity2_Id);
}

public Entity3Config : EntityTypeConfiguration<Entity3>
{
    HasMany(x => x.Entity1s)
        .WithRequired(x => x.Entity3)
        .HasForeignKey(x => x.Entity3_Id);
}
 类似资料:
  • 我的MVC应用程序中有两个实体,我使用实体框架6代码优先的方法填充数据库。学生实体中有两个城市id;其中一个代表出生城市,另一个代表工作城市。当我如上所述定义外键时,将在迁移后在学生表中创建一个名为City\u ID的额外列。是否存在错误或如何定义这些FK?提前谢谢。 学生: 城市:

  • 问题内容: 我有一个2D整数数组。我希望将它们放入HashMap中。但是我想从基于数组索引的HashMap访问元素。就像是: 对于A [2] [5],它返回与该键关联的值。但是,如何使用一对密钥创建一个hashMap?或者通常是多个键:以一种我可以使用get(key1,key2,… keyN)来访问元素的方式。 编辑:发布问题3年后,我想再添加一点 我遇到了另一种方法。 数组索引,和可被表示为一个

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

  • 我们系统的所有用户都来自一个主“用户”类。同样,我们希望以相同的方式构造数据库,拥有一个主“用户”表,该表与特定用户类型的必要表连接,以提供额外的用户信息。 以这三个基本表格为例: 表用户 user_id|user_email|user_firstname|user_lastname|... 表雇员 user_id|employee_staff_number|... 表管理 user_id|adm

  • 我试图在laravel中创建一个主键-外键关系,但我一直遇到这个错误 我似乎找不到哪里出错了,因为我在查看了SO上的其他答案后,对模式进行了更改。 当我运行时,上面的错误会弹出,这是一个部分迁移。 任何指向这将是真棒,因为我已经寻找了一段时间的解决方案! 谢谢 员工表 部门表 工资表 新增:DB播种机。 根据评论更改了DB种子程序

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