我使用Code First方法创建数据库。在这里,我想实现1对1的关系用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
表也与PersonalDetails
也有1对1的关系。添加新表Nominee
当我运行Update-Database命令的代码首先迁移比异常后occure:
操作失败,因为索引或统计名为“IX_PersonalDetailId”表“PersonalDetails”已存在
任何人都可以请告诉我最新的问题,我该如何解决这个问题?
编辑:
我在这里分享我的研究,在这个问题上,请纠正我,如果我错了。可能会发生此异常,因为在共享主键方法中,依赖表的PK也是主表的FK。因此,在这种情况下,有2个主表,即AccountHolder
和Nominee
用于1个依赖表,即PersonalDetail
。所以当Entity框架尝试创建2个与上面提到的异常相同的FK时,结果就是这样。
您必须使用具有'PersonalDetail'属性的基类('AccountHolder'和'Nominee'派生自它)。我认为这可以与TPH继承一起使用。 – 2013-03-04 08:38:01
你的迁移是什么样子的? – cadrell0 2013-03-04 14:02:11
我刚刚阅读你的编辑,是的。PersonalDetail应该是主要表格,AccountHolder和被提名者应该是从属表格 – cadrell0 2013-03-04 14:04:45