1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
namespace System.Data.Entity.Objects
{
using ConcurrencyModel;
using System.Data.Entity.Infrastructure;
using System.Linq;
using Xunit;
public class LazyLoadingTests : FunctionalTestBase
{
[Fact]
public void Lazy_loading_of_entity_reference_does_not_work_on_detached_entity()
{
using (var context = new F1Context())
{
var team = context.Teams.FirstOrDefault();
var objectContext = ((IObjectContextAdapter)context).ObjectContext;
objectContext.Detach(team);
Assert.Null(team.Engine);
}
}
[Fact]
public void Lazy_loading_entity_collection_does_not_work_on_detached_entity()
{
using (var context = new F1Context())
{
var team = context.Teams.FirstOrDefault();
var objectContext = ((IObjectContextAdapter)context).ObjectContext;
objectContext.Detach(team);
Assert.Equal(0, team.Drivers.Count);
}
}
[Fact]
public void Lazy_loading_of_entity_reference_does_not_work_on_deleted_entity()
{
using (var context = new F1Context())
{
var team = context.Teams.FirstOrDefault();
var objectContext = ((IObjectContextAdapter)context).ObjectContext;
objectContext.DeleteObject(team);
objectContext.DetectChanges();
Assert.Null(team.Engine);
}
}
[Fact]
public void Lazy_loading_entity_collection_does_not_work_on_deleted_entity()
{
using (var context = new F1Context())
{
var team = context.Teams.FirstOrDefault();
var objectContext = ((IObjectContextAdapter)context).ObjectContext;
objectContext.DeleteObject(team);
Assert.Equal(0, team.Drivers.Count);
}
}
[Fact]
public void Lazy_loading_of_entity_reference_works_on_modified_entity()
{
using (var context = new F1Context())
{
var teamId = context.Teams.OrderBy(t => t.Id).AsNoTracking().FirstOrDefault().Id;
var engineId = context.Teams.Where(t => t.Id == teamId).Select(t => t.Engine).AsNoTracking().FirstOrDefault().Id;
var team = context.Teams.Where(t => t.Id == teamId).AsNoTracking().Single();
team.Constructor = "Foobarius Foobar";
Assert.NotNull(team.Engine);
}
}
[Fact]
public void Lazy_loading_entity_collection_works_on_modified_entity()
{
using (var context = new F1Context())
{
var team = context.Teams.FirstOrDefault();
team.Constructor = "Foobarius Foobar";
Assert.True(team.Drivers.Count > 0);
}
}
[Fact]
public void Lazy_loading_does_not_occur_in_the_middle_of_materialization()
{
using (var context = new F1Context())
{
var teams = context.Teams.OrderBy(t => t.Id).Take(10);
var objectContext = ((IObjectContextAdapter)context).ObjectContext;
objectContext.ObjectStateManager.ObjectStateManagerChanged += ObjectStateManager_ObjectStateManagerChanged;
foreach (var team in teams)
{
Assert.True(context.Configuration.LazyLoadingEnabled == true);
}
}
}
void ObjectStateManager_ObjectStateManagerChanged(object sender, ComponentModel.CollectionChangeEventArgs e)
{
Assert.True(((Team)e.Element).Drivers.Count == 0);
}
}
}
|