2010-03-11 2 views
1

두 테이블이있는 데이터베이스 프레임 워크가 있습니다. 첫 번째 테이블에는 ID 및 기본 키인 단일 열이 있습니다. 두 번째 테이블에는 두 개의 열이 있습니다. 하나는 varchar 기본 키이고 다른 하나는 첫 번째 테이블에 대한 nullable 외래 키입니다. 그것이 '계산 된'또는 '정체성'StoreGeneratedPattern로 표시되어 있으므로Entity Framework는 0..1에서 * 관계를 좋아하지 않습니다.

조건이 열 멤버 'DetailsControlSetId'을 지정할 수 없습니다 :

것은 나는 다음과 같은 유효성 검사 오류를 얻을 모델에 테이블을 추가 할 때.

여기서 'DetailsControlSetId'는 두 번째 테이블의 두 번째 외래 키 참조입니다.

단계 재현 :

1) 비주얼 스튜디오 2010 RC로 새로운 닷넷 3.5 클라이언트 프로파일 프로젝트를 만듭니다.
2) 아래의 스크립트를 테스트 데이터베이스와 비교하여 실행하십시오 (빈 데이터베이스가 수행 할 것입니다).
3) 생성 된 데이터베이스를 대상으로 EDMX 모델을 만들지 만 테이블을 가져 오지 않도록 선택합니다.
4) 데이터베이스의 모델을 업데이트하여 데이터베이스의 두 테이블 (DetailsControlSet 및 Application)을 선택합니다.
5) EDMX 모델의 유효성을 검사합니다.

테이블 생성 스크립트 :

CREATE TABLE [dbo].[DetailsControlSet](
    [DetailsControlSetId] [int] IDENTITY(1,1) NOT NULL, 
    CONSTRAINT [PK_DetailsControlSet] PRIMARY KEY CLUSTERED 
    (
     [DetailsControlSetId] ASC 
    ) 
) 

GO 

CREATE TABLE [dbo].[Application](
    [ApplicationName] [varchar](50) NOT NULL, 
    [DetailsControlSetId] [int] NULL, 
    CONSTRAINT [PK_Application] PRIMARY KEY CLUSTERED 
    (
     [ApplicationName] ASC 
    ) 
) 

GO 

ALTER TABLE [dbo].[Application] WITH CHECK ADD CONSTRAINT [FK_Application_DetailsControlSet] FOREIGN KEY([DetailsControlSetId]) 
REFERENCES [dbo].[DetailsControlSet] ([DetailsControlSetId]) 
ON UPDATE CASCADE 
ON DELETE CASCADE 
GO 

ALTER TABLE [dbo].[Application] CHECK CONSTRAINT [FK_Application_DetailsControlSet] 
GO 
+0

외래 키 열이 실제로 생성 되었습니까? 아니면 모델을 잘못 가져 오는 디자이너입니까? 또한 사용중인 Visual Studio 버전은 무엇입니까? – Rory

+0

복제 : http://stackoverflow.com/questions/2410590/what-is-the-properway-to-create-a- reinursive-entity-in-the-entity-framework @Orion, 질문에 대답하십시오. 같은 질문을 다시 게시하는 것이 아니라 원래 질문에 대해 질문했습니다. –

+0

음, 이것 역시 중복 : http://stackoverflow.com/questions/2382135/recursive-entity-causing-all-sorts-of-problems –

답변

2

업데이트ADO.NETofficial 팀 블로그에 게시 된 도움이 될 수 있습니다 !)이 재현 단계를 게시, 내에서 오류가 발생할 수 있습니다. 기계. 그리고 "import everything at first"모델과 "import tables later"모델의 EDMX를 비교하면 문제가 명확 해집니다. 은 "작업"모델이 라인을 가지고 : 두 모델 사이의 유일한 실질적인 차이입니다

<Property Name="DetailsControlSetId" Type="int" StoreGeneratedPattern="Identity" /> 

:

<Property Name="DetailsControlSetId" Type="int" /> 

"오류"모델이 라인을 가지고있다.

그래서이 문제를 해결하려면 :
  1. 오른쪽 솔루션 탐색기에서 EDMX을 클릭합니다.
  2. XML 편집기로 열기.
  3. 삭제 StoreGeneratedPattern="Identity"
  4. 오류가 즉시 사라집니다.

이 테스트 케이스를 통해 몇 가지 연구를 수행 할 수있었습니다. 그것은 this is a known bug in VS 2010 beta and was fixed a few days ago으로 밝혀졌습니다.

+0

모델의 차이점과 모델을 수동으로 수정하는 방법에 대해 알고있었습니다. 나는 근본 원인을 찾고 있었다. 이 버그가 발견되었다는 조사에 감사드립니다. –

0

이 문서는, 당신은 (마지막했습니다 이제

+0

불행히도 이것은 내가 이미 알고있는 모든 기본 정보입니다. 기본 엔티티를 설정하는 방법을 찾는 것이 아니라이 0..1에서 * 관계로 설정하는 방법을 찾고 있습니다. –

+1

샘플 DB 스크립트가 이미 올바르게 작동합니다. 빈 DB에 적용하여 EF 모델을 생성했습니다. 오류 없음. –

관련 문제