我正在做代码优先的实体框架设计。
我有一个表 Account,它有一个属性 Supervisor:
public class Account
{
public int Id { get; set; }
public Account Supervisor { get; set; }
}
这效果很好。
但是,我希望在班级中添加一名候补主管:
public class Account
{
public int Id { get; set; }
public Account Supervisor { get; set; }
public Account AlternateSupervisor { get; set; }
}
当我运行 Add-Migration AddAlternateSupervisor 时,生成的代码给出以下内容:
public partial class AddAlternateSupervisor : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Accounts_Accounts_SupervisorId",
table: "Accounts");
migrationBuilder.DropIndex(
name: "IX_Accounts_SupervisorId",
table: "Accounts");
migrationBuilder.AddColumn<int>(
name: "AlternateSupervisorId",
table: "Accounts",
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_Accounts_AlternateSupervisorId",
table: "Accounts",
column: "AlternateSupervisorId",
unique: true,
filter: "[AlternateSupervisorId] IS NOT NULL");
migrationBuilder.AddForeignKey(
name: "FK_Accounts_Accounts_AlternateSupervisorId",
table: "Accounts",
column: "AlternateSupervisorId",
principalTable: "Accounts",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
}
// snip
}
如您所见,EF 正在尝试将我的引用从 Supervisor 重命名为 AlternateSupervisor。我不希望这样,我希望 Supervisor 和 AlternateSupervisor 都引用其他帐户。
我知道 EF 无法处理多个多对多关系,但这些是一对一关系。我似乎找不到任何关于 EF 为何生成这样的迁移的信息。
那么,为什么实体框架尝试将 Supervisor 重命名为 AlternateSupervisor,以及如何强制它生成两个链接?
编辑:这个问题已按照最初的要求得到回答。然而,我想补充一点,所问的问题并没有多大的领域意义。谁听说过一个帐户只能监管另一个帐户?该关系是一对多的关系,通过使用WithMany而不是WithOne来解决。