实体框架6使用下划线添加其他外键

时间:2018-07-18 09:13:26

标签: c# mysql entity-framework-6 ef-migrations

我在使用Entity Framework 6时遇到了麻烦。

迁移会生成带有下划线的其他外键。

我有一个用于Person和PersonRelative的表

人员表

  • 编号
  • 名称

个人相对表

  • Id

  • PersonId

  • RelativeId(人员类型)

  • 关系(附加表,确定什么是关系 此人与其亲戚的关系。)

首先使用代码进行Entity Framework迁移,为PersonId添加一个额外的外键,它是一个Person_Id。

因此,基本上 PersonRelative 表具有:

  • 编号
  • PersonId
  • RelativeId
  • 关系
  • Person_Id

这是生成的代码:

CreateTable(
            "dbo.PersonRelatives",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    Relationship = c.string(nullable: false),
                    PersonId= c.Int(nullable: false),
                    RelativeId= c.Int(nullable: false),
                    Person_Id= c.Int(),
                })
            .PrimaryKey(t => t.Id)
            .ForeignKey("dbo.Persons", t => t.PersonId, cascadeDelete: true)
            .ForeignKey("dbo.Persons", t => t.RelativeId, cascadeDelete: true)

            .ForeignKey("dbo.Persons", t => t.Person_Id)
            .Index(t => t.PersonId)
            .Index(t => t.RelativeId)
            .Index(t => t.Person_Id);

我的PersonRelative实体模型:

public class PersonRelative
{
    public int Id { get; set; }

    public string Relationship{ get; set; }




    [ForeignKey("Person")]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int PersonId{ get; set; }
    public Person Person { get; set; }

    [ForeignKey("Relative")]
    public int RelativeId { get; set; }
    public Person Relative { get; set; }

}

2 个答案:

答案 0 :(得分:0)

您可以尝试在OnModelCreating中覆盖DbContext并手动指定关系。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<PersonRelative>()
       .HasOne(p => p.Person)
       .HasForeignKey<int>(p => p.PersonId);          
}

在此处了解有关键和关系的更多信息:https://docs.microsoft.com/en-us/ef/core/modeling/relational/fk-constraints

答案 1 :(得分:0)

我设法通过将此代码(请参见下面的代码段)添加到我的DbContext OnModelCreating中来解决问题。

在此文档的帮助下: https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/fluent/relationships#configuring-a-composite-foreign-key

感谢@Giovanni向我指出了正确的方向。

  modelBuilder.Entity<Person>()
       .HasMany(a => a.PersonRelatives)
       .WithMany()
       .Map(a =>
       {
           a.MapLeftKey("PersonId");
           a.MapRightKey("RelativeId");
       });

我的人相对班级:

public class PersonRelative
{
    public int Id { get; set; }

    public string Relationship{ get; set; }




    [ForeignKey("Person")]
    public int PersonId{ get; set; }
    public Person Person { get; set; }

    [ForeignKey("Relative")]
    public int RelativeId { get; set; }
    public Person Relative { get; set; }

}

我的人物班级:

public class Person
{
   public int Id { get; set; } 
   public string Name{ get; set; }
   public ICollection<PersonRelative> PersonRelatives {get;set;}
}