2008-09-08 23 views
1

我有兩個實體(e1和e2)之間的關係,e1有e2的集合,但是我在(e2和e3)之間建立了類似的關係,但e2不包含e3的集合,任何原因這會發生?任何我可以發佈,以便更容易弄清楚?LINQ to SQL不會根據關係生成集合的原因是什麼?

編輯:我只是注意到,e1和e2之間的關係是固體的,e2和e3之間是虛線的,是什麼原因造成的?它有關係嗎?

+0

你得到它的工作,或者是你仍然有問題? – KyleLanser 2008-10-07 15:12:46

回答

0

的FK_Contraints設置了這樣的:。

ALTER TABLE [DBO] [E2] WITH CHECK ADD CONSTRAINT [FK_e2_e1]外鍵([E1Id])參考文獻[DBO] [E1]([ID ])

ALTER TABLE [DBO]。[E3] WITH CHECK ADD CONSTRAINT [FK_e3_e2]外鍵([E2Id])參考文獻[DBO]。[E2]([ID])

這就是你請求?

2

使用此設置,一切正常。

1)LINQ到SQL查詢,2)表DB,3)LINQ到SQL數據模型在VS.NET 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 - LINQ to SQL數據模型在Visual Studio

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