“user”类由实体框架模型第一个设计器自动生成。
public partial class user
{
public user()
{
this.distributorDevice = new HashSet<distributorDevice>();
this.managerDevice = new HashSet<managerDevice>();
this.logUserLogin = new HashSet<logUserLogin>();
this.logUserOperates = new HashSet<logUserOperates>();
this.clientApp = new HashSet<clientApp>();
}
public int Id { get; set; }
public string name { get; set; }
public byte[] password { get; set; }
public bool isActive { get; set; }
public System.DateTime RegisterTime { get; set; }
public int permissionId { get; set; }
public System.DateTime lastLoginTime { get; set; }
public virtual permission permission { get; set; }
public virtual ICollection<distributorDevice> distributorDevice { get; set; }
public virtual ICollection<managerDevice> managerDevice { get; set; }
public virtual ICollection<logUserLogin> logUserLogin { get; set; }
public virtual ICollection<logUserOperates> logUserOperates { get; set; }
public virtual ICollection<clientApp> clientApp { get; set; }
public virtual customerDevice customerDevice { get; set; }
}
如果我这样写的
public class UserController : ApiController
{
public IEnumerable<user> Get()
{
List<user> users = new List<user>();
return user;
}
}
当我在资源管理器中访问“localhost:3700 / api / user”时,它可以工作。
<ArrayOfuser xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/UpdateServer.Model"/>
如果我这样写的
public IEnumerable<user> Get()
{
using (var mydb = new ModelContainer())
{
return mydb.userSet.AsEnumerable();
}
}
当我在资源管理器中访问“localhost:3700 / api / user”时,收到错误消息:
103 (net::ERR_CONNECTION_ABORTED)
遵循建议,我应该使用ToList()而不是asEnumerable,我改变这样的代码
using (var mydb = new ModelContainer())
{
var users = mydb.userSet.ToList();
return users;
}
但是资源管理器中仍存在同样的错误
103 (net::ERR_CONNECTION_ABORTED)
我在
添加了一个中断return users;
发现用户已从数据库获取数据,但未正确返回客户端。
我做了更多的测试,我添加了一个权限名称为“Admin”的用户,如果我使用下面的代码,则找不到用户,并且它正确响应客户端。
var users = mydb.userSet.Where(p=>p.permission.name == "Administrator").ToList();
return users;
如果我这样写
var users = mydb.userSet.Where(p=>p.permission.name == "Admin").ToList();
return users;
无法返回客户端,给出错误
103 (net::ERR_CONNECTION_ABORTED)
答案 0 :(得分:2)
EF使用延迟加载。这意味着在您尝试使用结果之前,EF实际上不会调用数据库。
要解决此问题,您可以使用ToList()。与AsEnumerable不同,ToList会立即执行查询。
另一种选择是不处理上下文。虽然这可能看起来有误,但实际上可以让db context保持活动状态,让垃圾收集器在你不再使用任何返回的用户对象时获取它。