我刚刚学习了实体框架,并且在将它与我的分层代码结构结合起来方面取得了一些不错的进展。我有 2 个可视层,一个业务层和一个数据访问层。
我的问题是在层之间传递实体对象。此代码示例不起作用:
// BLL
public static void Test1()
{
List<User> users = (from u in GetActiveUsers()
where u.ID == 1
select u).ToList<User>();
// Do something with users
}
// DAL
public static IQueryable<User> GetActiveUsers()
{
using (var context = new CSEntities())
{
return from u in context.Users
where u.Employee.FirstName == "Tom"
select u;
}
}
我收到错误消息ObjectContext 实例已被释放,不能再用于需要连接的操作。
如果我从 GetActiveUsers 方法中删除using ,它可以正常工作。
我知道这是危险的做法,因为 GC 可以在任何给定时间处理上下文并搞砸我的 BLL。
那么,在层之间传递信息的正确方法是什么?我是否也需要传递上下文?