实体框架 + Web API,在 DbContext 之外返回实体(复杂、集合等)

Posted

技术标签:

【中文标题】实体框架 + Web API,在 DbContext 之外返回实体(复杂、集合等)【英文标题】:Entity Framework + Web API, return Entities (Complex, collections, etc) outside DbContext 【发布时间】:2017-05-06 05:31:09 【问题描述】:

这是我的情况。我将 Entity Framework 4 与 Web API 一起使用

我的代码结构非常简单,我有服务层,我的所有休息 API 都组织在那里,我有我的业务逻辑层,我有业务控制器来管理休息调用和数据层之间的事务。最后,我有一个带有 generic 存储库的数据层和一个 DAO 来访问整个事物。

在我的业务控制器中,我使用 using 来注入非事务性(只读方法)或事务性(CRUD 方法)DbContext。

将值返回到我的 REST API 时,我将其解析为 JSON。

问题是我一直有这个异常:Newtonsoft.Json.JsonSerializationException

我在 using 语句外部返回我的实体/集合/列表,我认为 EF 默认不喜欢这些。

在调试模式下,有时我会设法检索所有数据,但不是一直。由于我的实体来自 DbContext 中的查询,因此我认为行为是在处理完上下文后删除加载的子属性。

事实是,我想保持我的结构不变,我想知道以下几点:

有没有办法在离开 using 语句后返回完整(非延迟加载)实体?

非常感谢

【问题讨论】:

在 using 语句之后 DBContext 已经关闭,所以你不能对它做任何事情而不抛出异常。 您是否从 JsonSerializationException 中获得了更多信息?例如,如果您的实体相互引用,您是否会在序列化过程中陷入无限循环? 【参考方案1】:

我实际上阅读了有关实体框架行为的更多信息。我得到的实际上是 EF 的标准。我必须强制上下文加载()我的引用实体,以便在离开上下文后获取它们。

【讨论】:

以上是关于实体框架 + Web API,在 DbContext 之外返回实体(复杂、集合等)的主要内容,如果未能解决你的问题,请参考以下文章

带有实体框架的 CRUD WEB API

具有实体框架的CRUD WEB API

最小的 Web API 和播种内存中实体框架数据库

在没有实体框架的情况下创建 Odata Web API 应用程序

实体框架(Web API)中的 System.Data.SqlClient.SqlException

带有实体框架的 ASP.Net Core Web API 使用存储过程有啥好处吗? [关闭]