LINQ to SQL无法基于关系生成集合的原因是什么?
时间:2020-03-05 18:49:42 来源:igfitidea点击:
我在两个实体(e1和e2)之间有一个关系,并且e1有一个e2的集合,但是我在(e2和e3)之间也建立了类似的关系,但是e2不包含e3的集合发生?我可以发布任何内容以使其更容易理解吗?
编辑:我只是注意到e1和e2之间的关系是牢固的,而e2和e3之间的关系是点缀的,是什么原因引起的?有关系吗?
解决方案
回答
FK_Contraints设置如下:
带有检查添加约束[FK_e2_e1]外部键([E1Id])的ALTER TABLE [dbo]。[e2]参考[dbo]。e1
带有检查添加约束[FK_e3_e2]外部键([E2Id])的ALTER TABLE [dbo]。[e3]参考[dbo]。e2
这是我们要的吗?
回答
使用此设置,一切正常。
1)LINQ to SQL查询,2)数据库表,3)VS.NET 2008中的LINQ to SQL数据模型
1 LINQ to 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 Visual Studio中的LINQ to SQL数据模型
替代文字http://i478.photobucket.com/albums/rr148/KyleLanser/ThreeLevelHierarchy.png