Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

115 lines
4.0 KiB
C#

// 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);
}
}
}