The following model/query:
```
public class MyBase
{
public int Id { get; set; }
}
public class MyDerived1 : MyBase
{
public string Name { get; set; }
public MyDerived2 Der2 { get; set; }
}
public class MyDerived2 : MyBase
{
public string Name { get; set; }
public MyDerived1 Der1 { get; set; }
}
public class MyContext : DbContext
{
public DbSet<MyBase> Bases { get; set; }
protected override void OnModelCreating(DbModelBuilder builder)
{
builder.Entity<MyBase>().ToTable("MyBase");
builder.Entity<MyDerived2>().HasOptional(e => e.Der1).WithOptionalDependent(e => e.Der2);
builder.Entity<MyDerived1>().ToTable("Der1");
builder.Entity<MyDerived2>().ToTable("Der2");
}
}
ctx.Bases.OfType<MyDerived2>().Where(e => e.Der1.Der2.Name == "Foo");
```
In 6.1 the following SQL is produced:
```
SELECT
[Extent1].[Id] AS [Id],
'0X0X' AS [C1],
[Extent1].[Name] AS [Name],
CAST(NULL AS varchar(1)) AS [C2],
[Extent1].[Der1_Id] AS [Der1_Id]
FROM [dbo].[Der2] AS [Extent1]
INNER JOIN [dbo].[Der2] AS [Extent2] ON (([Extent2].[Der1_Id] = [Extent1].[Der1_Id]) OR (([Extent2].[Der1_Id] IS NULL) AND ([Extent1].[Der1_Id] IS NULL))) AND ([Extent1].[Der1_Id] IS NOT NULL)
WHERE ([Extent2].[Der1_Id] IS NOT NULL) AND (N'Foo' = [Extent2].[Name])
```
However in 6.1.1 query is much more complex:
```
SELECT
[Project1].[Id] AS [Id],
[Project1].[C1] AS [C1],
[Project1].[Name] AS [Name],
[Project1].[C2] AS [C2],
[Project1].[Der1_Id] AS [Der1_Id]
FROM ( SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Der1_Id] AS [Der1_Id],
[Extent1].[Name] AS [Name],
'0X0X' AS [C1],
CAST(NULL AS varchar(1)) AS [C2],
[Join2].[Der1_Id1] AS [Der1_Id1],
[Join2].[Name1] AS [Name1],
[Join2].[Id1] AS [Id1],
[Join2].[Id2] AS [Id2],
[Join2].[Der1_Id2] AS [Der1_Id2]
FROM [dbo].[Der2] AS [Extent1]
LEFT OUTER JOIN (SELECT [Extent2].[Der1_Id] AS [Der1_Id1], [Extent2].[N
ame] AS [Name1], [Join1].[Id1], [Join1].[Id2], [Join1].[Der1_Id2]
FROM [dbo].[Der2] AS [Extent2]
INNER JOIN (SELECT [Extent3].[Id] AS [Id1], [Extent4].[Id] AS [Id2]
, [Extent4].[Der1_Id] AS [Der1_Id2]
FROM [dbo].[Der1] AS [Extent3]
INNER JOIN [dbo].[Der2] AS [Extent4] ON ([Extent4].[Der1_Id] IS
NOT NULL) AND ([Extent3].[Id] = [Extent4].[Der1_Id]) ) AS [Join1] ON [Join1].[Id
1] = [Extent2].[Der1_Id] ) AS [Join2] ON [Extent1].[Id] = [Join2].[Id2]
) AS [Project1]
WHERE N'Foo' = [Project1].[Name1]
```
Comments: Closing, the issue reported by customer is tracked separately: https://entityframework.codeplex.com/Workitem/2369
This is unrelated to SqlCE, but rather the complexity of the query.