PageRenderTime 26ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/test/EntityFramework/FunctionalTests/Query/LinqToEntities/IncludeTests.cs

http://entityframework.codeplex.com
C# | 262 lines | 242 code | 19 blank | 1 comment | 9 complexity | 3551db7b862101dba6ded1857b132bcf MD5 | raw file
Possible License(s): Apache-2.0
  1. // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
  2. namespace System.Data.Entity.Query.LinqToEntities
  3. {
  4. using System.Data.Entity.Infrastructure;
  5. using System.Data.Entity.TestModels.ArubaModel;
  6. using System.Linq;
  7. using Xunit;
  8. public class IncludeTests : FunctionalTestBase
  9. {
  10. [Fact]
  11. public void Include_on_one_to_many_relationship()
  12. {
  13. using (var context = new ArubaContext())
  14. {
  15. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  16. var query = context.Runs.Include(c => c.Tasks);
  17. var results = query.ToList();
  18. var tasksForRuns = context.Runs.Select(r => r.Tasks).ToList();
  19. for (var i = 0; i < results.Count; i++)
  20. {
  21. Assert.Equal(tasksForRuns[i].Count, results[i].Tasks.Count);
  22. var expectedTasks = tasksForRuns[i].Select(t => t.Id).ToList();
  23. var actualTasks = results[i].Tasks.Select(t => t.Id).ToList();
  24. Assert.True(Enumerable.SequenceEqual(expectedTasks, actualTasks));
  25. }
  26. }
  27. }
  28. [Fact]
  29. public void Include_on_many_to_many_relationship()
  30. {
  31. using (var context = new ArubaContext())
  32. {
  33. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  34. var query = context.Configs.Include(c => c.Failures);
  35. var results = query.ToList();
  36. var failuresForConfigs = context.Configs.Select(r => r.Failures).ToList();
  37. for (var i = 0; i < results.Count; i++)
  38. {
  39. Assert.Equal(failuresForConfigs[i].Count, results[i].Failures.Count);
  40. var expectedFailures = failuresForConfigs[i].Select(t => t.Id).ToList();
  41. var actualFailures = results[i].Failures.Select(t => t.Id).ToList();
  42. Assert.True(Enumerable.SequenceEqual(expectedFailures, actualFailures));
  43. }
  44. }
  45. }
  46. [Fact]
  47. public void Include_one_to_one_relationship()
  48. {
  49. using (var context = new ArubaContext())
  50. {
  51. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  52. var query = context.Owners.Include(o => o.OwnedRun);
  53. var results = query.ToList();
  54. var runsForOwners = context.Owners.Select(r => r.OwnedRun).ToList();
  55. Enumerable.SequenceEqual(runsForOwners, results.Select(r => r.OwnedRun));
  56. }
  57. }
  58. [Fact]
  59. public void Multiple_includes()
  60. {
  61. using (var context = new ArubaContext())
  62. {
  63. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  64. var query = context.Failures.Include(f => f.Configs).Include(f => f.Bugs);
  65. var results = query.ToList();
  66. var configsForFailures = context.Failures.Select(r => r.Configs).ToList();
  67. var bugsForFailures = context.Failures.Select(r => r.Bugs).ToList();
  68. for (var i = 0; i < results.Count; i++)
  69. {
  70. Assert.Equal(bugsForFailures[i].Count, results[i].Bugs.Count);
  71. Assert.Equal(configsForFailures[i].Count, results[i].Configs.Count);
  72. var expectedBugs = bugsForFailures[i].Select(b => b.Id).ToList();
  73. var expectedConfigs = configsForFailures[i].Select(c => c.Id).ToList();
  74. var actualBugs = results[i].Bugs.Select(b => b.Id).ToList();
  75. var actualConfigs = results[i].Configs.Select(c => c.Id).ToList();
  76. Enumerable.SequenceEqual(expectedBugs, actualBugs);
  77. Enumerable.SequenceEqual(expectedConfigs, actualConfigs);
  78. }
  79. }
  80. }
  81. [Fact]
  82. public void Include_with_string_overload()
  83. {
  84. using (var context = new ArubaContext())
  85. {
  86. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  87. var query = context.Runs.Include("Tasks");
  88. var results = query.ToList();
  89. var tasksForRuns = context.Runs.Select(r => r.Tasks).ToList();
  90. for (var i = 0; i < results.Count; i++)
  91. {
  92. Assert.Equal(tasksForRuns[i].Count, results[i].Tasks.Count);
  93. var expectedTasks = tasksForRuns[i].Select(t => t.Id).ToList();
  94. var actualTasks = results[i].Tasks.Select(t => t.Id).ToList();
  95. Enumerable.SequenceEqual(expectedTasks, actualTasks);
  96. }
  97. }
  98. }
  99. [Fact]
  100. public void Nested_include()
  101. {
  102. using (var context = new ArubaContext())
  103. {
  104. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  105. var query = context.Owners.Include("OwnedRun.Tasks");
  106. var results = query.ToList();
  107. var tasksForOwners = context.Owners.Select(o => o.OwnedRun.Tasks).ToList();
  108. for (var i = 0; i < results.Count; i++)
  109. {
  110. Assert.Equal(tasksForOwners[i].Count, results[i].OwnedRun.Tasks.Count);
  111. var expectedTasks = tasksForOwners[i].Select(t => t.Id).ToList();
  112. var actualTasks = results[i].OwnedRun.Tasks.Select(t => t.Id).ToList();
  113. Enumerable.SequenceEqual(expectedTasks, actualTasks);
  114. }
  115. }
  116. }
  117. [Fact]
  118. public void Include_propagation_over_filter()
  119. {
  120. using (var context = new ArubaContext())
  121. {
  122. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  123. var query = context.Owners.Include(o => o.OwnedRun).Where(o => o.Id == 1);
  124. var results = query.ToList();
  125. Assert.NotNull(results.First().OwnedRun);
  126. }
  127. }
  128. [Fact]
  129. public void Include_propagation_over_sort()
  130. {
  131. using (var context = new ArubaContext())
  132. {
  133. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  134. var query = context.Owners.Include(o => o.OwnedRun).OrderBy(o => o.Id == 1);
  135. var results = query.ToList();
  136. Assert.NotNull(results.First().OwnedRun);
  137. }
  138. }
  139. [Fact]
  140. public void Include_propagation_over_type_filter()
  141. {
  142. using (var context = new ArubaContext())
  143. {
  144. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  145. var query = context.Configs.Include(o => o.Failures).OfType<ArubaMachineConfig>();
  146. var results = query.ToList();
  147. Assert.True(results.Any(r => r.Failures.Count > 0));
  148. }
  149. }
  150. [Fact]
  151. public void Include_propagation_over_first()
  152. {
  153. using (var context = new ArubaContext())
  154. {
  155. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  156. var results = context.Configs.Include(o => o.Failures).First();
  157. Assert.NotNull(results.Failures);
  158. Assert.True(results.Failures.Count > 0);
  159. }
  160. }
  161. [Fact]
  162. public void Include_propagation_over_first_with_predicate()
  163. {
  164. using (var context = new ArubaContext())
  165. {
  166. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  167. var results = context.Configs.Include(o => o.Failures).First(o => o.Id > 0);
  168. Assert.NotNull(results.Failures);
  169. Assert.True(results.Failures.Count > 0);
  170. }
  171. }
  172. [Fact]
  173. public void Include_propagation_over_first_or_default()
  174. {
  175. using (var context = new ArubaContext())
  176. {
  177. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  178. var results = context.Configs.Include(o => o.Failures).FirstOrDefault();
  179. Assert.NotNull(results.Failures);
  180. Assert.True(results.Failures.Count > 0);
  181. }
  182. }
  183. [Fact]
  184. public void Include_propagation_over_first_or_default_with_predicate()
  185. {
  186. using (var context = new ArubaContext())
  187. {
  188. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  189. var results = context.Configs.Include(o => o.Failures).FirstOrDefault(o => o.Id > 0);
  190. Assert.NotNull(results.Failures);
  191. Assert.True(results.Failures.Count > 0);
  192. }
  193. }
  194. [Fact]
  195. public void Include_from_concat_combined()
  196. {
  197. using (var context = new ArubaContext())
  198. {
  199. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  200. var query = context.Failures.Include(f => f.Bugs).Concat(context.Failures.Include(f => f.Configs));
  201. var results = query.ToList();
  202. Assert.True(results.Any(r => r.Bugs.Count > 0));
  203. Assert.True(results.Any(r => r.Configs.Count > 0));
  204. }
  205. }
  206. [Fact]
  207. public void Include_from_except_takes_span_information_from_first_collection_ignores_from_second()
  208. {
  209. using (var context = new ArubaContext())
  210. {
  211. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  212. var query = context.Failures.Include(f => f.Bugs).Except(context.Failures.Where(f => f.Id == 1).Include(f => f.Configs));
  213. var results = query.ToList();
  214. Assert.True(results.Any(r => r.Bugs.Count > 0));
  215. Assert.True(results.All(r => r.Configs == null));
  216. }
  217. }
  218. [Fact]
  219. public void Include_from_intersect_combined()
  220. {
  221. using (var context = new ArubaContext())
  222. {
  223. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  224. var query = context.Failures.Include(f => f.Bugs).Intersect(context.Failures.Include(f => f.Configs));
  225. var results = query.ToList();
  226. Assert.True(results.Any(r => r.Bugs.Count > 0));
  227. Assert.True(results.Any(r => r.Configs.Count > 0));
  228. }
  229. }
  230. [Fact]
  231. public void Include_from_union_combined()
  232. {
  233. using (var context = new ArubaContext())
  234. {
  235. ((IObjectContextAdapter)context).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
  236. var query = context.Failures.Include(f => f.Bugs).Union(context.Failures.Include(f => f.Configs));
  237. var results = query.ToList();
  238. Assert.True(results.Any(r => r.Bugs.Count > 0));
  239. Assert.True(results.Any(r => r.Configs.Count > 0));
  240. }
  241. }
  242. }
  243. }