|
I think I've got a solid example. I'm including a script that creates 3 simple tables (1 table has 2 soft links to the other 2). The tables look like table1 (table1ID, table2ID, table3ID, UpdateDate), table2 (table2ID, UpdateDate), table3 (table3ID, UpdateDate). FK between table1 and the other two tables have No Check and no Enforce FK (just to clarify the soft relationship). Pulling those tables (no data required) into EDMX and then simple query of something like: var manager = new NorthwindIBEntities();
var q3 = manager.table1
.Include(tab => tab.table2)
.Include(tab => tab.table3)
.ToList(); Resulting query it generates for me is (using SQL Profiler): SELECT [Extent1].[table1ID] AS [table1ID], [Extent1].[table2ID] AS [table2ID], [Extent1].[table3ID] AS [table3ID], [Extent1].[UpdateDate] AS [UpdateDate], [Extent2].[table2ID] AS [table2ID1], [Extent2].[UpdateDate] AS [UpdateDate1], [Extent3].[table3ID] AS [table3ID1], [Extent3].[UpdateDate] AS [UpdateDate2] FROM [dbo].[table1] AS [Extent1] INNER JOIN [dbo].[table2] AS [Extent2] ON [Extent1].[table2ID] = [Extent2].[table2ID] LEFT OUTER JOIN [dbo].[table3] AS [Extent3] ON [Extent1].[table3ID] = [Extent3].[table3ID] If I reverse the order of the .Include() so it's: var manager = new NorthwindIBEntities(); var q3 = manager.table1 .Include(tab => tab.table3) .Include(tab => tab.table2) .ToList(); I get the following SQL: SELECT [Extent1].[table1ID] AS [table1ID], [Extent1].[table2ID] AS [table2ID], [Extent1].[table3ID] AS [table3ID], [Extent1].[UpdateDate] AS [UpdateDate], [Extent2].[table3ID] AS [table3ID1], [Extent2].[UpdateDate] AS [UpdateDate1], [Extent3].[table2ID] AS [table2ID1], [Extent3].[UpdateDate] AS [UpdateDate2] FROM [dbo].[table1] AS [Extent1] INNER JOIN [dbo].[table3] AS [Extent2] ON [Extent1].[table3ID] = [Extent2].[table3ID] LEFT OUTER JOIN [dbo].[table2] AS [Extent3] ON [Extent1].[table2ID] = [Extent3].[table2ID] I'm using VS2010, DF 6.1.6.0. /****** Object: Table [dbo].[table3] Script Date: 04/25/2012 09:55:28 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[table3]( [table3ID] [int] IDENTITY(1,1) NOT NULL, [UpdateDate] [smalldatetime] NOT NULL, CONSTRAINT [PK_table3] PRIMARY KEY CLUSTERED ( [table3ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: Table [dbo].[table2] Script Date: 04/25/2012 09:55:28 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[table2]( [table2ID] [int] IDENTITY(1,1) NOT NULL, [UpdateDate] [smalldatetime] NOT NULL, CONSTRAINT [PK_table2] PRIMARY KEY CLUSTERED ( [table2ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: Table [dbo].[table1] Script Date: 04/25/2012 09:55:28 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[table1]( [table1ID] [int] IDENTITY(1,1) NOT NULL, [table2ID] [int] NOT NULL, [table3ID] [int] NOT NULL, [UpdateDate] [smalldatetime] NOT NULL, CONSTRAINT [PK_table1] PRIMARY KEY CLUSTERED ( [table1ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: ForeignKey [FK_table1_table2] Script Date: 04/25/2012 09:55:28 ******/ ALTER TABLE [dbo].[table1] WITH NOCHECK ADD CONSTRAINT [FK_table1_table2] FOREIGN KEY([table2ID]) REFERENCES [dbo].[table2] ([table2ID]) GO ALTER TABLE [dbo].[table1] NOCHECK CONSTRAINT [FK_table1_table2] GO /****** Object: ForeignKey [FK_table1_table3] Script Date: 04/25/2012 09:55:28 ******/ ALTER TABLE [dbo].[table1] WITH NOCHECK ADD CONSTRAINT [FK_table1_table3] FOREIGN KEY([table3ID]) REFERENCES [dbo].[table3] ([table3ID]) NOT FOR REPLICATION GO ALTER TABLE [dbo].[table1] CHECK CONSTRAINT [FK_table1_table3] GO
|