2013-05-26 6 views
1

이 문제가 검색되었지만 불행히도 해결책을 찾지 못했습니다. 나는 내 응용 프로그램에서 연락처를 만들려고 할 때INSERT 문이 FOREIGN KEY 제약 조건과 충돌했습니다.

나는 오류

외래 키 제약 "FK_Contacts_UserProfile"와 충돌 INSERT 문을 얻는다. 데이터베이스 "ContactAppContext", 테이블 "dbo.UserProfile", 열 'UserId'에서 충돌이 발생했습니다.

나는

내 테이블은 다음과 같이 보이는 Contacts 테이블과 UserId를 연결할 : 당신이 그림에서 볼 수 있듯이, UserIdUserProfile 테이블에 존재

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) 
); 

pic

그래서 내가 뭘 잘못하고 있니?

EDIT 1
@Alexander Fedorenko는
이 코드를 의미?

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

Contact 테이블에 삽입하려는 사용자 ID가 UserProfile 테이블에 있어야합니다. - – Sachin

+3

이름이나 전자 메일 주소와 같은 열에는'NVARCHAR (MAX)'를 사용하지 마십시오. –

+1

실제 삽입 코드를 게시하십시오. –

답변

0

먼저 UserProfile 테이블을 만든 다음 Contacts 테이블을 만들어보십시오.

+0

답변을 주셔서 감사합니다.이 내용을 설명해 주시겠습니까? –

+1

다른 테이블을 참조하는 테이블 연락처를 만들 때 외부 키 [FK_Contacts_UserProfile] 외래 키 ([UserId]) 참조 [dbo]. [UserProfile] ([UserId] 테이블에 UserProfile이 아직 존재하지 않습니다. –

2

먼저 데이터를 UserProfile 테이블에 추가하거나 데이터가 삽입되는 동안 외래 키 제약 조건을 일시적으로 비활성화해야합니다.

연락처 테이블이 UserProfile 테이블을 참조하도록 테이블이 설정되므로 연락처를 삽입하려면 UserProfile의 항목이 필요합니다.

다음과 같이보십시오. 먼저 UserProfile 테이블에서 생성하지 않으면 연락처 테이블에 입력 할 UserID가 어떻게 될지 알 수 있습니까?

+0

답장을 보내 주셔서 감사합니다. 그것을 이해하지만, 연락처를 만들고이 레코드를 데이터베이스에 추가 할 때 사용자와 연락처 간의 연관성을 추가하는 몇 가지 방법을 작성해야합니까? 아니면 위의 내용으로 충분합니까? –

관련 문제