0

全部,

我从 Entity Framework 4(还不是 CTP5)开始,正在研究将 NHibernate 迁移到 EF 的复杂性。

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

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

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

同样,是否有任何方法可以测试相关实体是否是代理?

非常感谢

4

1 回答 1

2

在 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 中还有一个用于延迟加载的选项。

于 2011-05-17T16:41:25.913 回答