我如何处理实体框架消息

时间:2012-08-15 08:23:30

标签: .net entity-framework

我有一个规范化的数据库,我正在使用EF4.3。

在这种情况下,我有一个用户(每个人都是用户)。有些是订阅者,订阅者是贡献者,成员或管理员。

因此,对于每种类型的用户,我都会通过导航属性包含适当的关联。

所以会员linq声明会是这样的:

            var u = r.FindBy(x => x.UserId == userId)
                .Include("Subscribers")
                .Include("Members")
                .SingleOrDefault();

就对象而言,每个人都是用户 - 只是不同的排列。

当我没有包含某些导航属性时,我正试图在代码中处理这个问题的最佳方法。例如,我不会在上面的示例中包含Contributor或Administrator。通常我可以检查user.subscriber.contributor不是NULL,但是我得到了“对象上下文已被处理......”,即使我做了这个检查。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您正在接收异常,因为您的实体被代理以进行延迟加载,并且在您处理上下文之前它们未被正确分离。分离具有加载关系的实体是不可能的(您必须通过serizliazation创建深层副本),因此在这种情况下,最好的解决方案是关闭延迟加载。在这种情况下,您的实体将不会尝试首次访问的延迟加载导航属性。

objectContext.ContextOptions.LazyLoadingEnabled = false;

您也可以关闭整个代理创建:

objectContext.ContextOptions.ProxyCreationEnabled = false;