0

我有一个与 EF4.3 一起使用的规范化数据库。

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

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

所以成员 linq 语句将是这样的:

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

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

当不包含某些导航属性时,我正在尝试寻找在代码中处理此问题的最佳方法。例如,我不会在上面的示例中包括贡献者或管理员。通常我可以检查 user.subscriber.contributor 不为 NULL,但即使我进行此检查,我也会得到“对象上下文已被处理...”。

我该如何解决这个问题?

4

1 回答 1

0

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

objectContext.ContextOptions.LazyLoadingEnabled = false;

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

objectContext.ContextOptions.ProxyCreationEnabled = false;
于 2012-08-15T10:34:43.403 回答