gpt4 book ai didi

ASP.NET Web API - Entity Framework - 500 内部服务器错误。包含(param => param.field)

转载 作者:行者123 更新时间:2023-12-02 18:12:23 25 4
gpt4 key购买 nike

我目前正在开发一个使用 Entity Framework 的数据库优先方法的 Web API 项目(我知道这还不是最稳定的平台),但我遇到了一些非常奇怪的事情。

当我的 APIController 中的 GET 方法尝试返回 DbSet 中的所有记录(涉及 LINQ Include() 方法,如下所示)时,它将返回 500 错误:

// GET api/Casinos
public IEnumerable<casino> Getcasinos()
{
var casinos = db.casinos.Include(c => c.city).Include(c => c.state);
return casinos.AsEnumerable();
}

然而,这个方法工作正常,并从我的数据库中返回我的数据:

// GET api/States
public IEnumerable<state> Getstates()
{
return db.states.AsEnumerable();
}

因此,我在其他实例中证明,如果它返回没有 LINQ 查询的实体,它会很好地工作,但是当 DbContext 上使用 Include 方法时,它会失败。

当然,即使使用Fiddler、Chrome/Firefox开发工具,并添加GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;,试图找到这个错误也是不可能的。

如果有人解决了这个问题,那么很高兴知道一个好的解决方案,这样我就可以开始返回我的数据了!谢谢!:)

附注我正在使用 SQL Server 2012

最佳答案

这是由于序列化 (Json/XML) 错误而发生的。问题是您直接尝试通过线路传输模型。作为示例,请参见以下内容:

public class Casino
{
public int ID { get; set; }
public string Name { get; set; }

public virtual City City { get; set; }
}

public class State
{
public int ID { get; set; }
public string Name { get; set; }

[XmlIgnore]
[IgnoreDataMember]
public virtual ICollection<City> Cities { get; set; }
}

public class City
{
public int ID { get; set; }
public string Name { get; set; }

public virtual State State { get; set; }

[XmlIgnore]
[IgnoreDataMember]
public virtual ICollection<Casino> Casinos { get; set; }
}

public class Context : DbContext
{
public Context()
: base("Casino")
{

}

public DbSet<Casino> Casinos { get; set; }
public DbSet<State> States { get; set; }
public DbSet<City> Cities { get; set; }
}

请注意 XmlIgnoreIgnoreDataMember。您需要限制避免序列化,这样它就不会以循环方式发生。此外,上述模型仍然无法工作,因为它具有虚拟性。从任何地方删除虚拟,即 CityCitiesCasinosState,然后它会起作用,但效率很低.

总结:使用 DTO 并仅发送您真正想要发送的数据,而不是直接发送您的模型。

希望这有帮助!

关于ASP.NET Web API - Entity Framework - 500 内部服务器错误。包含(param => param.field),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11752495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com