我正在使用 Code First 方法来创建数据库。在这里,我试图通过使用Shared primary key
方法来实现 1 对 1 的关系:
public partial class AccountHolder
{
public int AccountHolderId { get; set; }
public virtual PersonalDetail Detail { get; set; }
}
//Added later
public partial class Nominee
{
public int NomineeId { get; set; }
public virtual PersonalDetail Detail { get; set; }
}
public partial class PersonalDetail
{
public int PersonalDetailId { get; set; }
...
}
我流利的 Api 代码:
modelBuilder.Entity<AccountHolder>().HasOptional(p => p.Detail)
.WithRequired()
.WillCascadeOnDelete();
//Added later
modelBuilder.Entity<Nominee>().HasOptional(p => p.Detail)
.WithRequired()
.WillCascadeOnDelete();
最初我只有 2 个表AccountHolder
,PersonalDetails
并且共享主键方法在它上面运行良好。但是现在当我添加与Nominee
1 对 1 关系的表时,就会出现问题PersonalDetails
。添加新表后Nominee
,当我运行代码第一次迁移的Update-Database 命令时,出现异常:
操作失败,因为表“PersonalDetails”上已存在名为“IX_PersonalDetailId”的索引或统计信息
谁能告诉我这是什么问题,我该如何解决这个问题?
编辑 :
我在这里分享我对这个问题的研究,如果我错了,请纠正我。可能会发生此异常,因为在共享主键方法中,依赖表的 PK 也是主表的 FK。因此,在这种情况下,有 2 个主表 ieAccountHolder
和Nominee
1 个从属表 ie PersonalDetail
。因此,当实体框架尝试创建 2 个同名的 FK 时,就会出现上述异常。