我正在尝试使用以下查询查询UserMetaData以获取单个记录
using (JonTestDataEntities context = new JonTestDataEntities())
{
return context.UserMetaData.Single(user => user.User.ID == id);
}
我收到的错误是:ObjectContext实例已被释放,不能再用于需要连接的操作。它试图为UserMetaData记录延迟加载Group。如何更改查询以防止出现此错误?
答案 0 :(得分:3)
正如消息所说,你不能在函数返回后懒惰地加载它,因为你已经处理了上下文。如果您希望能够访问Group
,则可以确保提前获取它。扩展方法.Include(entity => entity.NavigationProperty)
就是您如何表达这一点:
using (JonTestDataEntities context = new JonTestDataEntities())
{
return context.UserMetaData.Include(user => user.Group).Single(user => user.User.ID == id);
}
另请考虑添加.AsNoTracking()
,因为无论如何您的上下文都会消失。
答案 1 :(得分:1)
您需要创建一个与结果集的签名匹配的强类型。实体框架正在创建一个匿名类型,并且在using语句超出范围之后处理匿名类型。
因此,分配强类型可以完全避免这个问题。我建议创建一个名为UserDTO的类,因为在这种情况下你真的要创建一个数据传输对象。专用DTO的好处是您只能包含必要的属性,以使您的响应尽可能轻松。