2013-05-26 169 views
1

我搜索了這類問題,但不幸找不到任何解決方案。INSERT語句與FOREIGN KEY約束衝突

當我嘗試創建我的應用程序的聯繫人我得到一個錯誤

INSERT語句衝突與外鍵約束「FK_Contacts_UserProfile」。數據庫「ContactAppContext」,表「dbo.UserProfile」,列'UserId'發生衝突。

我想UserIdContacts表進行關聯

我的表是這樣的:

CREATE TABLE [dbo].[Contacts] (
    [ContactId] INT   IDENTITY (1, 1) NOT NULL, 
    [UserId] INT   NOT NULL, 
    [FirstName] NVARCHAR (MAX) NOT NULL, 
    [LastName] NVARCHAR (MAX) NOT NULL, 
    [Address] NVARCHAR (MAX) NOT NULL, 
    [City]  NVARCHAR (MAX) NOT NULL, 
    [Phone]  NVARCHAR (MAX) NOT NULL, 
    [Email]  NVARCHAR (MAX) NOT NULL, 
    CONSTRAINT [PK_dbo.Contacts] PRIMARY KEY CLUSTERED ([ContactId] ASC), 
    CONSTRAINT [FK_Contacts_UserProfile] FOREIGN KEY ([UserId]) REFERENCES [dbo].[UserProfile] ([UserId]) 
); 

CREATE TABLE [dbo].[UserProfile] (
    [UserId] INT   IDENTITY (1, 1) NOT NULL, 
    [UserName] NVARCHAR (56) NOT NULL, 
    PRIMARY KEY CLUSTERED ([UserId] ASC), 
    UNIQUE NONCLUSTERED ([UserName] ASC) 
); 

正如你可以在圖片中看到,UserId存在於UserProfile

pic

那麼我在做什麼錯了?

編輯1
@Alexander費德林
你的意思是這個代碼?

SET IDENTITY_INSERT [dbo].[UserProfile] ON 
INSERT INTO [dbo].[UserProfile] ([UserId], [UserName]) VALUES (1, N'admin') 
INSERT INTO [dbo].[UserProfile] ([UserId], [UserName]) VALUES (2, N'test') 
INSERT INTO [dbo].[UserProfile] ([UserId], [UserName]) VALUES (3, N'user') 
SET IDENTITY_INSERT [dbo].[UserProfile] OFF 

@Sachin我如何確定,當我嘗試插入聯繫人表中時,它應該出現在UserProfile表中?例如,我有一個UserId = 3的用戶,他已經登錄,當他插入數據時,創建的聯繫人將與該用戶有關。

EDIT 2
所以,當我創建了一個編輯字段在視圖中UserId,它似乎是工作,當我指定UserId,並且數據被創建,但我不希望這個編輯器領域在創建聯繫人頁面中存在UserId,因爲用戶編寫他的UserId是不方便的。那麼是否有可能將UserId與登錄用戶聯繫起來,例如當他創建數據時,他不需要指定他的UserId,而是將該記錄自動保存到數據庫中並使用他的ID?

+1

確保無論用戶標識符,您試圖插入聯繫人表中,它都應該出現在UserProfile表中。 - – Sachin

+3

請勿將'NVARCHAR(MAX)'用於名稱或電子郵件地址等列。 –

+1

請發佈實際的插入代碼。 –

回答

0

嘗試先創建UserProfile表,然後再創建聯繫人表。

+0

謝謝你的回答,你能解釋一下這會給我什麼嗎? –

+1

創建表時您正在引用另一個表的聯繫人 CONSTRAINT [FK_Contacts_UserProfile] FOREIGN KEY([UserId])REFERENCES [dbo]。[UserProfile]([UserId] 但表UserProfile尚不存在 –

2

您需要先將數據添加到UserProfile表中,或者在數據插入時臨時禁用外鍵約束。

您的表已設置爲使Contacts表引用UserProfile表,因此需要UserProfile中的條目才能插入Contact。

這樣看待:如果您不先在UserProfile表中生成它,如何知道將要在Contacts表中輸入的用戶ID?

+0

感謝回覆,I理解,但是我應該寫一些方法,當他創建聯繫人並將此記錄添加到數據庫中時添加了用戶和聯繫人之間的關聯?或者您上面所說的是足夠的嗎? –

相關問題