115 lines
4.0 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|