我在使用Entity Framework 6时遇到了麻烦。
迁移会生成带有下划线的其他外键。
我有一个用于Person和PersonRelative的表
人员表
个人相对表
Id
PersonId
RelativeId(人员类型)
关系(附加表,确定什么是关系 此人与其亲戚的关系。)
首先使用代码进行Entity Framework迁移,为PersonId添加一个额外的外键,它是一个Person_Id。
因此,基本上 PersonRelative 表具有:
这是生成的代码:
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; }
}
答案 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中来解决问题。
感谢@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;}
}