【问题标题】:How I keep entity object after DataContext disposed?处理 DataContext 后如何保留实体对象?
【发布时间】:2011-10-20 19:00:23
【问题描述】:

我从数据库中获取数据时使用这种风格

public class User
{
    public static List<User> GetUsers()
    {
        List<User> users = new Users();
        using ( var context = new DataContext())
        {
            users = context.Users.ToList();
        }

        return users;
    }
}

从数据库中获取数据后,我想过滤用户喜欢这个

List<User> userResultList = User.GetUsers();   
userResultList.Where(u => u.IsActive == true);

但无法过滤,我收到此错误

ObjectContext 实例已被释放,不能再使用 用于需要连接的操作。

我的问题: 处理 DataContext 后是否可以过滤结果对象?

非常感谢大家的支持。

更新!!!

我认为如果我在我想检索数据的方法范围内创建新的 DbContext 是可能的

这种方法是否足够好?

例子

public class User
    {
        public static List<User> GetUsers()
        {
            List<User> users = new Users();

            var context = new DataContext())
            users = context.Users.ToList();

            return users;
        }
    }

【问题讨论】:

  • 您的IsActive 属性实现是什么?它是持久属性还是一些计算属性?
  • 我在您发布的代码中没有发现问题。您需要 DataContext 用于检索部分(在您的情况下)。使用 linq 您可以过滤集合。因此,要回答您的问题,您可以在处理 DataContext 后过滤列表。也许错误有不同的原因。
  • 在执行堆栈中被序列化的列表是否更高?通过 WCF 服务或类似服务?
  • 不,这不是好的方法。在 using 语句中包装上下文是好的。另外,如果您正在做 MVC 应用程序,您可能不想在每个操作方法中创建新的上下文。
  • 什么进程实际上触发了userResultList.Where(u =&gt; u.IsActive == true) 的枚举(这只是一个本身什么都不做的枚举)?看起来那里触发了一些延迟加载。

标签: linq entity-framework datacontext


【解决方案1】:

不知道如果你克隆列表会绕过这个错误?

User[] L = new User[users.Count];
users.CopyTo(L);

推测:

你所拥有的看起来应该在表面上起作用。

我想知道 ToList() 返回的东西是不是继承自 list 的东西,并且在里面保留了一些隐藏的上下文感知。

我现在无法测试这个想法。不过有一些事情需要考虑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    相关资源
    最近更新 更多