entity framework 6添加了带下划线的附加外键

00jrzges  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(419)

实体框架6有问题。
迁移将生成带下划线的其他foreignkey。
我有一张供人和亲戚用的table
人员表
身份证件
名称
personrelative表
身份证件
拟人
相对ID(人员类型)
关系(附加表,用于确定此人与其亲属之间的关系。)
首先使用代码,实体框架迁移为personid添加了一个额外的外键,它是personid。
基本上,personrelative表有:
身份证件
拟人
相对
关系
人员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; }

}
1wnzp6jl

1wnzp6jl1#

我通过将此代码(参见下面的代码片段)添加到我的dbcontext onmodelcreating中,成功地解决了我的问题。
借助本文档:https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/fluent/relationships#configuring-复合外键
感谢@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;}
}
ql3eal8s

ql3eal8s2#

你可以试着重写 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

相关问题