EF4测试,如果集合或相关实体是自我跟踪实体的代理

时间:2011-03-11 15:28:24

标签: proxy ef4-code-only

所有

我刚开始使用Entity Framework 4(还没有CTP5),我正在研究将NHibernate迁移到EF的复杂性。

如果集合或相关实体 是代理,我们会测试一些代码,如果是,则执行一些不同的代码以正常运行。如果集合代理(即它已经被加载到上下文中),那么我们会直接针对集合执行其他操作。

我已迁移此代码以使用IRelatedEnd接口进行集合,但将ICollection强制转换为IRelatedEnd会导致EF加载集合...结果是当我检查IsLoaded时集合永远不是代理在下一行中== true。

我是否需要做一些额外的事情,因为这是一个自定义的POCO,还是这种预期的行为?

同样,无论如何都要测试相关实体是否是代理?

非常感谢

1 个答案:

答案 0 :(得分:2)

测试代理的suggested method over on MSDN是使用类似的东西:

public static bool IsProxy(object type)
{
    return type != null && ObjectContext.GetObjectType(type.GetType()) != type.GetType();
}

此方法适用于EF 4和EF 4.1 Codefirst。

至于延迟加载,我从不使用IRelatedEnd - 只是将POCO中的导航属性保留为ICollection并确保启用了延迟加载。除此之外,它只是有效。

context.ContextOptions.LazyLoadingEnabled = true;

在edmx中还有一个延迟加载选项。