首先输入代码,INSERT语句与FOREIGN KEY约束冲突

问题描述 投票:3回答:2

我刚刚开始使用代码优先方法来创建数据库。我有以下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该语句已终止。“}

谁能告诉我如何解决此问题以及我在这里缺少什么?

我刚刚开始使用代码优先方法来创建数据库。我有以下3表:公共部分类AccountHolder {public int AccountHolderId {get;组; } public virtual List&...

c# sql database code-first
2个回答
4
投票

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.