在Code first中,INSERT语句与FOREIGN KEY约束冲突
本文关键字:FOREIGN KEY 约束 冲突 语句 INSERT Code first | 更新日期: 2023-09-27 18:01:51
我刚开始使用代码优先的方法创建数据库。我有以下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);
}
现在我的问题是每当我试图在accounholder或提名人插入数据时,我得到了这个异常:
如果插入AccountHolder
{" INSERT语句与外键约束冲突'" fk_dbo . addresses_dbo . nomes_nomeid '"。冲突发生在数据库"CodeFirst"中。BankContext'", table '"dbo。提名者","提名者"栏。'r'n语句已终止。"}
插入提名人
{" INSERT语句与外键约束冲突'"FK_dbo.Addresses_dbo.AccountHolders_AccountHolderId'"。冲突发生在数据库"CodeFirst"中。BankContext'", table '"dbo。,列"AccountHolderId"。'r'n语句已终止。"}
有没有人能告诉我如何解决这个问题,我在这里错过了什么?
您尝试插入提名中不存在的地址提名。首先是提名人的实例,然后填写值并创建地址和填写值,最后创建accounholder的实例。然后保存
在表dbo中。accounholder和dbo。被提名者,它有一个指向另一个表的外键引用。FK的工作方式是,它的列中的值不能不在被引用表的主键列中。
如果你有SQL Server Management Studio,打开sp_help 'db .db . nominee '。看看FK在哪个列上,以及它引用了哪个表的哪个列。你插入了一些坏数据。对sp_help 'dbo.dbo. accounholder '执行同样的操作。
希望这对你有帮助。