【发布时间】:2021-11-22 17:29:57
【问题描述】:
我在使用 EF 6 时遇到了一点问题。这些是我的模型(好吧,我省略了不相关的属性):
[Table("Departments")]
public class Department
{
public string Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public IList<Staff> Staff { get; set; }
public Staff HOD { get; set; }
}
[Table("Staff")]
public class Staff
{
[Key]
public string EmployeeId { get; set; }
public string Name { get; set; }
public Department Department { get; set; }
}
这是 EF6 正在生成的迁移(嗯,只是创建方法):
CreateTable(
"dbo.Staff",
c => new
{
EmployeeId = c.String(nullable: false, maxLength: 128),
Name = c.String(),
Department_Id = c.String(maxLength: 128),
Department_Id1 = c.String(maxLength: 128),
})
.PrimaryKey(t => t.EmployeeId)
.ForeignKey("dbo.Departments", t => t.Department_Id)
.ForeignKey("dbo.Departments", t => t.Department_Id1)
.Index(t => t.Department_Id) //what's this?
.Index(t => t.Department_Id1); //what's this?
CreateTable(
"dbo.Departments",
c => new
{
Id = c.String(nullable: false, maxLength: 128),
Name = c.String(),
Description = c.String(),
HOD_EmployeeId = c.String(maxLength: 128),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.Staff", t => t.HOD_EmployeeId)
.Index(t => t.HOD_EmployeeId);
看看生成的外键。似乎有些不对劲。我该如何纠正这个问题?
【问题讨论】:
-
您的数据库上下文的
OnModelCreating方法覆盖中有任何代码吗?迁移生成的命名约定看起来不是很标准,这让我假设您有一些自定义代码在某处覆盖了模型构建器。 -
就
RemovePluralizingTableNameConvention -
向 Department 添加一个可为空的 HODId 列并将其配置为 HOD 的 FK。
标签: c# asp.net-core-mvc entity-framework-6