2008-09-08 5 views
1

J'ai une relation entre deux entités (e1 et e2) et e1 a une collection de e2, mais j'ai une relation similaire établie entre (e2 et e3), mais e2 ne contient pas une collection de e3, aucune raison pour laquelle cela arriverait? Quelque chose que je peux poster pour le rendre plus facile à comprendre? Edit: Je viens de remarquer que la relation entre e1 et e2 est solide et entre e2 et e3 est pointillé, ce qui provoque cela? Est-ce lié?Quelle est la raison pour laquelle LINQ to SQL ne génère pas de collection basée sur une relation?

+0

avez-vous le faire fonctionner, ou êtes-vous encore des problèmes? – KyleLanser

Répondre

0

les FK_Contraints sont mis en place comme ceci:..

ALTER TABLE [dbo] [e2] AVEC CONTRÔLE ADD CONSTRAINT [FK_e2_e1] FOREIGN KEY ([E1Id]) RÉFÉRENCES [dbo] [e1] ([Id ])

ALTER TABLE [dbo]. [e3] AVEC ajouter CONTRAINTE [FK_e3_e2] FOREIGN KEY ([E2Id]) RÉFÉRENCES [dbo]. [e2] ([Id])

est ce que vous demandaient?

2

En utilisant cette configuration, tout a fonctionné.

1) LINQ to SQL Query, 2) Tables DB, 3) LINQ to SQL Data Model dans VS.NET 2008

1 - LINQ to SQL Query

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 - Scripts de base de données

--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 Data Model dans Visual Studio

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

Questions connexes