【问题标题】:EF4 test if collection or related entity is proxy for self-tracking entitiesEF4 测试集合或相关实体是否是自跟踪实体的代理
【发布时间】:2011-05-18 00:41:25
【问题描述】:

全部,

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

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

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

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

同样,是否有测试相关实体是否为代理?

非常感谢

【问题讨论】:

    标签: proxy ef4-code-only


    【解决方案1】:

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

    【讨论】:

    • 你的回答是正确的,但我想指出这一点:如果你只是想找到对象的“真实”类型,你可以总是使用ObjectContext.GetObjectType()不管是否真的是动态代理。我提到这一点是因为我发现自己在这里,但这种检查是完全没有必要的。见:blogs.msdn.com/b/adonet/archive/2011/02/02/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 2011-12-12
    相关资源
    最近更新 更多