Let me illustrate, given the root class:
Code: Select all
public class RootItem
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public List ChildItems1 { get; set; }
public List ChildItems2 { get; set; }
}
Code: Select all
[Table("ChildItem1")]
public class ChildItem1
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
}
Code: Select all
public class ChildItem2
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
}
Code: Select all
[Table("InheritedChild1")]
public class InheritedChild1 : ChildItem1
{
[MaxLength(10)]
public string TheColumnThatCausesErrors { get; set; }
}
Code: Select all
public class MyDbContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
modelBuilder.Conventions.Remove();
}
public DbSet RootItems { get; set; }
public DbSet ChildItems1 { get; set; }
public DbSet ChildItems2 { get; set; }
}
Code: Select all
using (MyDbContext context = new MyDbContext())
{
var query = (from p in
context.RootItems
.Include(r => r.ChildItems1)
.Include(r => r.ChildItems2)
select p).ToList();
}
The following query is sent to the database:
Code: Select all
SELECT
"UnionAll1"."Id" AS C1,
"UnionAll1"."Id1" AS C2,
"UnionAll1".C1 AS C3,
"UnionAll1"."Id2" AS C4,
"UnionAll1".C2 AS C5,
"UnionAll1"."Id3" AS C6,
"UnionAll1".C3 AS C7,
"UnionAll1"."RootItem_Id" AS C8,
"UnionAll1".C4 AS C9,
"UnionAll1".C5 AS C10,
"UnionAll1".C6 AS C11
FROM (SELECT
CASE WHEN "Join1"."Id1" IS NULL THEN TO_NUMBER(NULL) ELSE 1 END AS C1,
"Extent1"."Id" AS "Id",
"Extent1"."Id" AS "Id1",
"Join1"."Id1" AS "Id2",
CASE WHEN "Join1"."Id1" IS NULL THEN TO_CHAR(NULL) WHEN NOT (("Join1".C1 = 1) AND ("Join1".C1 IS NOT NULL)) THEN '2X' ELSE '2X0X' END AS C2,
"Join1"."Id1" AS "Id3",
CASE WHEN "Join1"."Id1" IS NULL THEN TO_CHAR(NULL) WHEN NOT (("Join1".C1 = 1) AND ("Join1".C1 IS NOT NULL)) THEN TO_CHAR(NULL) ELSE "Join1"."TheColumnThatCausesErrors" END AS C3,
"Join1"."RootItem_Id" AS "RootItem_Id",
TO_NUMBER(NULL) AS C4,
TO_NUMBER(NULL) AS C5,
TO_NUMBER(NULL) AS C6
FROM "RootItems" "Extent1"
LEFT OUTER JOIN (SELECT
"Extent2"."Id" AS "Id1",
"Extent2"."RootItem_Id" AS "RootItem_Id",
"Project1"."Id" AS "Id2",
"Project1"."TheColumnThatCausesErrors" AS "TheColumnThatCausesErrors",
"Project1".C1 AS C1
FROM "ChildItem1" "Extent2"
LEFT OUTER JOIN (SELECT
"Extent3"."Id" AS "Id",
"Extent3"."TheColumnThatCausesErrors" AS "TheColumnThatCausesErrors",
1 AS C1
FROM "InheritedChild1" "Extent3" ) "Project1" ON "Extent2"."Id" = "Project1"."Id" ) "Join1" ON "Extent1"."Id" = "Join1"."RootItem_Id"
UNION ALL
SELECT
2 AS C1,
"Extent4"."RootItem_Id" AS "RootItem_Id",
"Extent4"."RootItem_Id" AS "RootItem_Id1",
TO_NUMBER(NULL) AS C2,
TO_CHAR(NULL) AS C3,
TO_NUMBER(NULL) AS C4,
TO_NCHAR(NULL) AS C5,
TO_NUMBER(NULL) AS C6,
"Extent4"."Id" AS "Id",
"Extent4"."Id" AS "Id1",
"Extent4"."RootItem_Id" AS "RootItem_Id2"
FROM "ChildItem2" "Extent4"
WHERE "Extent4"."RootItem_Id" IS NOT NULL) "UnionAll1"
ORDER BY "UnionAll1"."Id1" ASC, "UnionAll1".C1 ASC