【发布时间】:2018-07-18 09:13:25
【问题描述】:
我在使用 Entity Framework 6 时遇到问题。
迁移生成带有下划线的额外外键。
我有一个 Person 和 PersonRelative 表
人员表
- 身份证
- 姓名
PersonRelative 表
身份证
PersonId
RelativeId(人员类型)
关系(附加表,确定什么是关系 人与其亲属的关系。)
实体框架迁移首先使用代码为 PersonId 添加一个额外的外键,它是一个 Person_Id。
所以基本上,PersonRelative 表有:
- 身份证
- 人员标识
- 相对 ID
- 关系
- 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; }
}
【问题讨论】:
-
请在 C# 代码中显示类。
-
去掉 PersonId 上的 [DatabaseGenerated(DatabaseGeneratedOption.None)]。可能不是您的问题,但在 FK 上不需要。
-
@SteveGreene 它实际上什么也没做,我只是从另一个 SO 帖子中得到它。我应该摆脱它。
-
这也发生在我身上,在表格字段的名称中加上“ID”之后。我输入了“PersonID”,瞧……
标签: c# mysql entity-framework-6 entity-framework-migrations