【发布时间】: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 => u.IsActive == true)的枚举(这只是一个本身什么都不做的枚举)?看起来那里触发了一些延迟加载。
标签: linq entity-framework datacontext