[英]Problem getting the whole object from Entity Framework when requesting via API methods
[英]error occurred when requesting data via Entity Framework
我正在构建一个必须发送JSON数据的N层应用程序,该数据是通过Enity Framework从SQL Server 2012中读取的。
当我尝试请求用户集合时,出现“发生错误”页面。 它适用于硬编码数据。
这是我的代码:
public IEnumerable<User> Get()
{
IUserManager userManager = new UserManager();
return userManager.GetUsers();
}
public IEnumerable<User> GetUsers()
{
return repo.ReadUsers();
}
public IEnumerable<User> ReadUsers()
{
IEnumerable<User> users = ctx.Users.ToList();
return users;
}
“ ctx”是对DbContext对象的引用。
编辑:这有效:
public IEnumerable<User> Get()
{
IList<User> users = new List<User>();
users.Add(new User() { FirstName = "TestPerson1" });
users.Add(new User() { FirstName = "TestPerson2" });
return users;
}
浏览器屏幕截图: http : //i.imgur.com/zqG0qe0.png
编辑:完全错误(截图): http : //i.imgur.com/dt48tRG.png
提前致谢。
如果您的网站返回内部错误并且没有调用堆栈,则您看不到完整的异常(这使得很难准确指出您的问题)。
因此,首先要获得调用堆栈的实际异常,您有2种方法。
收到实际异常后,请使用调用堆栈和实际的内部服务器错误来更新您的问题。 我的猜测是您有一个序列化问题,也许是某种循环引用。 您的解决方法是制作一个简单的viewModel(而不直接返回实体)或添加序列化设置(例如json.net支持循环引用)。
编辑
怀疑序列化会给您带来困难。 原因是延迟加载使用的代理创建。 您可以使用以下代码禁用代理创建(请注意,这也会禁用延迟加载)。
public IEnumerable<User> ReadUsers()
{
ctx.Configuration.ProxyCreationEnabled = false;
IEnumerable<User> users = ctx.Users.ToList();
return users;
}
如果可行,您可以考虑在上下文初始化期间禁用代理创建。
尝试返回普通模型,像
var logins = ctx.Users.Select(user => new FlatUserModel
{
Id = user.Id,
Name = user.UserName,
Email = user.Email
})
.ToArray();
return logins;
还可以在浏览器中查看得到的响应。
由于它适用于硬编码数据,因此有可能在上下文上启用延迟加载。
如果是这样,请禁用上下文中的延迟加载或类似的操作,以使序列化为JSON不会从数据库加载实体。
public IEnumerable<User> ReadUsers()
{
ctx.Configuration.LazyLoadingEnabled = false;
IEnumerable<User> users = ctx.Users.ToList();
return users;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.