所有
我刚开始使用Entity Framework 4(还没有CTP5),我正在研究将NHibernate迁移到EF的复杂性。
如果集合或相关实体 是代理,我们会测试一些代码,如果是,则执行一些不同的代码以正常运行。如果集合不代理(即它已经被加载到上下文中),那么我们会直接针对集合执行其他操作。
我已迁移此代码以使用IRelatedEnd接口进行集合,但将ICollection强制转换为IRelatedEnd会导致EF加载集合...结果是当我检查IsLoaded时集合永远不是代理在下一行中== true。
我是否需要做一些额外的事情,因为这是一个自定义的POCO,还是这种预期的行为?
同样,无论如何都要测试相关实体是否是代理?
非常感谢
答案 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中还有一个延迟加载选项。