2008-09-08 1 views
1

두 엔터티 (e1과 e2) 사이의 관계가 있고 e1이 e2 컬렉션을 가지고 있지만 비슷한 관계가 (e2와 e3) 사이에 설정되어 있지만 e2에는 e3 컬렉션이 포함되지 않습니다. 이 일이 일어날까요? 쉽게 알아낼 수 있도록 게시 할 수있는 것은 무엇입니까?LINQ to SQL에서 관계를 기반으로 컬렉션을 생성하지 않는 이유는 무엇입니까?

편집 : e1과 e2 사이의 관계가 견고하고 e2와 e3 사이의 점선이 점재하는 것으로 나타났습니다. 그 원인은 무엇입니까? 그것은 관련이 있습니까?

+0

은 당신이 작업을 진행 않았거나 여전히 문제가있는 SQL 데이터 모델에 LINQ? – KyleLanser

답변

0

FK_Contraints이 같이 설정된다..

ALTER TABLE [DBO] [E2] 체크 ADD의 CONSTRAINT [FK_e2_e1] FOREIGN KEY WITH ([E1Id]) 참조 [DBO] [E1] ([ID ])

ALTER TABLE은 [DBO]. 체크 ADD 제약 [FK_e3_e2] FOREIGN KEY WITH [E3는] ([E2Id]) 참조 [DBO]. [E2는] ([ID])

이 무엇인지 묻고 있었어?

2

이 설정을 사용하면 모든 것이 작동합니다. VS.NET에서 SQL 데이터 모델에

SQL 쿼리에 1) LINQ, 2) DB 테이블, 3) LINQ 2008

1 - LINQ SQL로 쿼리

DataClasses1DataContext db = new DataClasses1DataContext(); 

var results = from threes in db.tableThrees 
    join twos in db.tableTwos on threes.fk_tableTwo equals twos.id 
    join ones in db.tableOnes on twos.fk_tableOne equals ones.id 
    select new { ones, twos, threes }; 

2 - 데이터베이스 스크립트

--Table One 
CREATE TABLE tableOne(
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [value] [nvarchar](50) NULL, 
CONSTRAINT [PK_tableOne] PRIMARY KEY CLUSTERED 
    ([id] ASC) WITH ( 
    PAD_INDEX = OFF, 
    STATISTICS_NORECOMPUTE = OFF, 
    IGNORE_DUP_KEY = OFF, 
    ALLOW_ROW_LOCKS = ON, 
    ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
    ) ON [PRIMARY]; 

--Table Two 
CREATE TABLE tableTwo(
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [value] [nvarchar](50) NULL, 
    [fk_tableOne] [int] NOT NULL, 
CONSTRAINT [PK_tableTwo] PRIMARY KEY CLUSTERED 
    ([id] ASC) WITH (
    PAD_INDEX = OFF, 
    STATISTICS_NORECOMPUTE = OFF, 
    IGNORE_DUP_KEY = OFF, 
    ALLOW_ROW_LOCKS = ON, 
    ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
    ) ON [PRIMARY]; 

ALTER TABLE tableTwo WITH CHECK  
    ADD CONSTRAINT [FK_tableTwo_tableOne] 
    FOREIGN KEY([fk_tableOne]) 
    REFERENCES tableOne ([id]); 

ALTER TABLE tableTwo CHECK CONSTRAINT [FK_tableTwo_tableOne]; 


--Table Three 
CREATE TABLE tableThree(
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [value] [nvarchar](50) NULL, 
    [fk_tableTwo] [int] NOT NULL, 
CONSTRAINT [PK_tableThree] PRIMARY KEY CLUSTERED 
    ([id] ASC) WITH (
    PAD_INDEX = OFF, 
    STATISTICS_NORECOMPUTE = OFF, 
    IGNORE_DUP_KEY = OFF, 
    ALLOW_ROW_LOCKS = ON, 
    ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
    ) ON [PRIMARY]; 

ALTER TABLE tableThree WITH CHECK 
    ADD CONSTRAINT [FK_tableThree_tableTwo] 
    FOREIGN KEY([fk_tableTwo]) 
    REFERENCES tableTwo ([id]); 

ALTER TABLE tableThree CHECK CONSTRAINT [FK_tableThree_tableTwo]; 

3 - 비주얼 스튜디오

alt text http://i478.photobucket.com/albums/rr148/KyleLanser/ThreeLevelHierarchy.png