我刚开始使用代码优先方法来创建数据库。我有以下 3 个表:
public partial class AccountHolder
{
public int AccountHolderId { get; set; }
public virtual List<Address> Address { get; set; }
}
public partial class Nominee
{
public int NomineeId { get; set; }
public virtual List<Address> Address { get; set; }
}
public partial class Address
{
public int AddressId { get; set; }
public int AccountHolderId { get; set; }
public AccountHolder AccountHolder { get; set; }
public int NomineeId { get; set; }
public Nominee Nominee { get; set; }
}
这里AccountHolder
和Nominee
两者都1 to *
与地址有关系。我用于此的流畅 API 代码是:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Address>().HasRequired(p => p.AccountHolder)
.WithMany(p => p.Address)
.HasForeignKey(p => p.AccountHolderId)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Address>().HasRequired(p => p.Nominee)
.WithMany(p => p.Address)
.HasForeignKey(p => p.NomineeId)
.WillCascadeOnDelete(false);
}
现在我的问题是,每当我尝试在 AccountHolder 或 Nominee 中插入数据时,我都会遇到此异常:
在 AccountHolder 插入的情况下
{"INSERT 语句与 FOREIGN KEY 约束 \"FK_dbo.Addresses_dbo.Nominees_NomineeId\" 冲突。冲突发生在数据库 \"CodeFirst.BankContext\"、表 \"dbo.Nominees\"、列 'NomineeId' 中。\r \n语句已终止。"}
在被提名人插入的情况下
{"INSERT 语句与 FOREIGN KEY 约束 \"FK_dbo.Addresses_dbo.AccountHolders_AccountHolderId\" 冲突。冲突发生在数据库 \"CodeFirst.BankContext\"、表 \"dbo.AccountHolders\"、列 'AccountHolderId' 中。\r \n语句已终止。"}
谁能告诉我如何解决这个问题以及我在这里缺少什么?