实体框架6.1.3延迟加载行为不一致

时间:2016-04-20 02:21:59

标签: c# .net entity-framework entity-framework-6

我有一个使用代码优先实体的项目。

以下测试通过: -

[TestMethod]
public void TestLazyLoadNewEntity()
{
    MyContext context = new MyContext();
    UserRoleEntity entity = context.Set<UserRoleEntity>().Create();
    entity.RoleID = 1;
    context.Set<UserRoleEntity>().Add(entity);
    Assert.IsNotNull(entity.Role);
}

此测试失败: -

[TestMethod]
public void TestLazyLoadNewEntity2()
{
    MyContext context = new MyContext();
    UserRoleEntity entity = context.Set<UserRoleEntity>().Create();
    context.Set<UserRoleEntity>().Add(entity);
    entity.RoleID = 1;
    Assert.IsNotNull(entity.Role);
}

在这两种情况下,它肯定都是创建代理实体,例如类型。

  

实体类型是   {System.Data.Entity.DynamicProxies.UserRoleRelationEnti_02312836F5B832353B301D531F352923C7A344A83045D8155F462D8BE23A5A53}

添加实体的顺序与分配的ID的差异会影响导航属性的延迟加载。在这两种情况下,我都可以在SQL事件探查器中看到执行加载角色的查询,但在第二种情况下,它无法导致加载导航属性。

这是预期的行为吗?我很确定以前的EF版本没有这样的行为。

编辑:按照建议pawel添加对DetectChanges的调用会使测试通过。因此,它看起来更像是预期的行为而不是错误。这对我来说是不幸的,因为我有一个代码库,曾经使用EDMX生成的实体,不需要这样的调用。我希望有另一种解决方案,因为我在一个很难找到的大代码库中破坏了代码

[TestMethod]
public void TestLazyLoadNewEntity2()
{
    MyContext context = new MyContext();
    UserRoleEntity entity = context.Set<UserRoleEntity>().Create();
    context.Set<UserRoleEntity>().Add(entity);
    entity.RoleID = 1;
    context.ChangeTracker.DetectChanges();
    Assert.IsNotNull(entity.Role);
}

0 个答案:

没有答案