2008-09-08 11 views
1

İki varlık arasında (e1 ve e2) bir ilişki var ve e1'in bir e2 koleksiyonu var, ancak (e2 ve e3) arasında benzer bir ilişkiye sahibim, ancak e2 e3'ün bir koleksiyonunu içermiyor, herhangi bir neden Bu olur? Bunu daha kolay anlayabilmek için gönderebileceğim bir şey var mı?LINQ to SQL'in bir ilişkiyi temel alan bir koleksiyon oluşturmayacak olmasının bir nedeni nedir?

Düzenleme: Sadece e1 ve e2 arasındaki ilişkinin katı olduğunu ve e2 ile e3 arasında nokta olduğunu fark ettim, bunun nedeni nedir? İlgili mi?

+0

o çalışma aldın yoksa hala sorunlarınız SQL Veri Modeli LINQ? – KyleLanser

cevap

0

FK_Contraints böyle ayarlanmıştır.:.

alter TABLO [Dbo] [e2] kontrol et KISITLAMA [FK_e2_e1] yabancı anahtar ([E1Id]) REFERANSLAR [Dbo] [e1] ([id ])

ALTER tablo [dbo]. FİYATLARI ADD KISITLAMA [FK_e3_e2] YABANCI KEY İLE [e3] ([E2Id]) REFERANSLAR [dbo]. [e2] ([id])

bu ne olduğunu soruyordu?

2

Bu kurulumu kullanarak, her şey çalıştı. VS.NET SQL Veri Modeli

SQL Query en 1) LINQ, 2) DB Tablolar, 3) LINQ 2008

1 - LINQ to SQL Sorgu

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 - Veritabanı Scripts

--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 - Visual Studio

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