public void Many_Many_Single_Single_Null() { try { QueryIncludeOptimizedManager.AllowIncludeSubPath = true; QueryIncludeOptimizedHelper.InsertOneToOneAndMany(many1: true, many2: true, single3: true, single4: false); using (var ctx = new TestContext()) { var left = ctx.Association_OneToSingleAndMany_Lefts .IncludeOptimized(x => x.Many_Right.SelectMany(y => y.Many_RightRight.Select(z => z.Single_RightRightRight.Single_RightRightRightRight))) .ToList().First(); var list1 = new List <Association_OneToSingleAndMany_Right>(); var list2 = new List <Association_OneToSingleAndMany_RightRight>(); var list3 = new List <Association_OneToSingleAndMany_RightRightRight>(); // Level 1 { Assert.IsNull(left.Single_Right); Assert.AreEqual(1, left.Many_Right.Count); list1.AddRange(left.Many_Right); } // Level 2 { foreach (var item in list1) { Assert.IsNull(item.Single_RightRight); Assert.AreEqual(1, item.Many_RightRight.Count); list2.AddRange(item.Many_RightRight); } } // Level 3 { foreach (var item in list2) { Assert.IsNotNull(item.Single_RightRightRight); Assert.IsNull(item.Many_RightRightRight); list3.Add(item.Single_RightRightRight); } } // Level 4 { foreach (var item in list3) { Assert.IsNull(item.Single_RightRightRightRight); Assert.IsNull(item.Many_RightRightRightRight); } } } } finally { QueryIncludeOptimizedManager.AllowIncludeSubPath = false; } }