2013-03-03 137 views
3

我只是使用代碼第一種方法,用於創建數據庫開始。我有以下3個表:代碼第一INSERT語句衝突與外鍵約束

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 * replationship與地址。我爲此使用的流暢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); 
    } 

現在我的問題是,每當我試圖在帳戶持有人或代理人將數據插入我得到這個異常:

在賬戶持有插入的情況下

{ 「INSERT語句衝突與外鍵約束\」 FK_dbo.Addresses_dbo.Nominees_NomineeId \」。該衝突發生於數據庫\ 「CodeFirst.BankContext \」,表\ 「dbo.Nominees \」,列「 NomineeId'。\ r \ n聲明有蜜蜂Ñ終止。 「}

在提名插入

{的情況下」 的INSERT語句衝突具有外鍵約束\ 「FK_dbo.Addresses_dbo.AccountHolders_AccountHolderId \」。衝突發生於數據庫\ 「CodeFirst.BankContext \」,表\ 「dbo.AccountHolders \」,列 'AccountHolderId'。\ r \ n該語句已終止。「}

Cananybody請告訴我如何解決這個問題,我在這裏丟失了什麼?

回答

4

您嘗試插入地址Nominees_NomineeId不存在於代名詞中。您應該提名的第一個實例然後填充值並創建Address和填充值最後創建AccountHolder.and的實例,然後保存

+0

感謝的答案,它的工作原理。但現在每當我將插入提名人或賬戶持有人,我要創建爲賬戶持有插入,並在提名插入的情況下,賬戶持有空對象的情況下,被提名人的空對象,有沒有辦法讓我可以爲這兩種設置的默認值這些導航屬性? – gaurav 2013-03-03 13:30:42

+0

我想你應該插入值,然後使用它,例如你必須在表中插入值,然後使用它。 – 2013-03-03 13:32:46

+0

好吧,但只是爲了好奇心什麼是爲兩者設置默認值的問題? – gaurav 2013-03-03 13:35:41

1

在你的餐桌dbo.AccountHolders和dbo.Nominees,它有一個外鍵引用另一個表。一個FK的工作方式是它不能有該列中的值不在引用表的主鍵列中。

如果您有SQL Server Management Studio中,打開它,並sp_help將 'dbo.dbo.Nominees'。查看FK所在的列,以及它引用哪個表的列。你插入了一些不好的數據。對sp_help'dbo.dbo.AccountHolders'做同樣的處理。

希望這會有所幫助。

相關問題