繁体   English   中英

In Code first INSERT 语句与 FOREIGN KEY 约束冲突

[英]In Code first The INSERT statement conflicted with the FOREIGN KEY constraint

我刚开始使用代码优先的方法来创建数据库。 我有以下 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; }
}

这里AccountHolderNominee都与地址有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语句已终止。"}

谁能告诉我如何解决这个问题以及我在这里遗漏了什么?

您尝试插入 Nominee 中不存在的地址 Nominees_NomineeId。您应该首先创建 Nominee 实例,然后填写值并创建地址并填写值,最后创建 AccountHolder 实例,然后保存

在您的表 dbo.AccountHolders 和 dbo.Nominees 中,它具有对另一个表的外键引用。 FK 的工作方式是它不能在该列中具有不在引用表的主键列中的值。

如果您有 SQL Server Management Studio,打开它并 sp_help 'dbo.dbo.Nominees'。 查看 FK 在哪一列,以及它引用哪个表的哪一列。 您正在插入一些错误数据。对 sp_help 'dbo.dbo.AccountHolders ' 执行相同操作。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM