无法访问已处置 object。 Object name: '在 Dispose 之后访问的 DataContext

Cannot access a disposed object. Object name: 'DataContext accessed after Dispose

标题是我使用LINQ2SQL通过以下方法生成数据后访问join objects后抛出的异常:

public static bool Get(int skip, int take, ListSortDirection direction, out List<Post> posts)
{
    bool result;

    using (var db = new MyDataContext())
    {
        try
        {
            posts = db.Posts
                .Where(p => !p.IsDeleted)
                .OrderBy(p => p.DateTimeCreated, direction)
                .Skip(skip)
                .Take(take)
                .ToList();
            result = true;
        }
        catch (Exception)
        {
            // Log the exception
            posts = new List<Post>();
            result = false;
        }
    }

    return result;
}

下面是我所指的连接示例 object。在上面的方法中,我选择了 collection 的帖子,并且 Userprofile table 的 userprofileID 被加入(在 .dbml 和数据库服务器中)到 Post 的 UserprofileID table。

问题是,当我检查生成的 collection 帖子时,链接的用户配置文件 returns 出现以下异常:

new System.Collections.Generic.Mscorlib_CollectionDebugView(posts).Items[0].Userprofile' 引发了 'System.ObjectDisposedException'

类型的异常

我试过禁用数据上下文中的 DeferredLoadingEnabled 属性并使用 DataLoadOptions:

var dlo = new DataLoadOptions();
dlo.LoadWith<Post>(p => p.Userprofile);
db.LoadOptions = dlo;

这导致了同样的异常;

还有什么我应该看的吗?

谢谢!

想通了。在数据上下文的部分版本的 onCreate 事件处理程序中,我添加了 DataLoadOptions。不确定为什么它在该方法中不起作用(可能是粗手指),但这就是我想出的。

public partial class MyDataContext 
{
    partial void OnCreated()
    {
        var options = new DataLoadOptions();

        options.LoadWith<Vote>(v => v.Post);
        options.LoadWith<Vote>(v => v.Userprofile);

        LoadOptions = options;                    
    }
}

...还有那些在没有发表评论的情况下两次投票否决我的人 - 帮我一个忙,养一对。