我的代码是这样的:
[HttpGet]
public List<User> GetUsers()
{
List<User> Users;
using (Entities db = new Entities())
{
var users = from u in db.Users select u;
Users = users.ToList();
}
//XXX
return Users;
}
我在XXX处设置了断点并确认对象 Users
仍然使用实际值进行实例化 . 我不知道Lazy Loading实际意味着什么,但肯定发生了一些加载 . 但我仍然得到这个错误:
ObjectContext实例已被释放,不能再用于需要连接的操作 .
为什么会这样?对象 Users
在using块之外声明,所以垃圾收集器是否应该跟踪对象是否仍在使用?
处理这个问题的方法是什么?
好的,我找到了原因 . User类具有Navigation属性PINS . 我读到有一个Include方法 . 但是在这种特定方法中不需要PINS属性 . 是否有排除方法?
我在return语句之前尝试了以下内容,但仍然存在相同的错误 .
foreach (var user in Users) user.PINS = null;
1 回答
您可以创建DTO(数据传输对象),这是一个自定义C#类,仅包含要序列化的属性 .
你也没有错误地实现API,
我建议使用以下模式,
另外结账实体REST SDK,我已经为实体框架编写了REST SDK,它可能完成所有工作,包括安全上下文的概念,它允许根据登录用户的类型自动过滤实体和隐藏序列化属性 .
http://entityrestsdk.codeplex.com