首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在WebAPI中使用实体框架对表进行GET调用时的异常

在WebAPI中使用实体框架对表进行GET调用时的异常
EN

Stack Overflow用户
提问于 2017-03-18 04:34:56
回答 1查看 4K关注 0票数 4

我正在尝试创建一个WebApi来使用实体框架从DB读取数据。

我的数据模型设计如下:

我添加了一个名为WebApi的SportsController控制器,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class SportsController : ApiController
{
    public HttpResponseMessage Get()
    {
        try
        {
            using (MyLeagueDBEntities dbEntity = new MyLeagueDBEntities())
            {
                return Request.CreateResponse(HttpStatusCode.OK, dbEntity.tbl_Sports.ToList());
            }
        }
        catch (Exception ex)
        {
            return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
        }
    }
}

在从浏览器调用请求到我的WebApi控制器GET方法时,我将得到如下所示的异常。但是在调试模式下,我可以看到它能够从数据库中获得数据,不会出现任何错误,但是一旦控件移出该方法,它就会抛出下面的异常。

例外细节:

“消息”:“发生了错误”, “'ObjectContent1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.", "ExceptionType":"System.InvalidOperationException", "StackTrace":null, "InnerException":{"Message":"An error has occurred.", "ExceptionMessage":"Error getting value from 'tbl\_Tournament' on 'System.Data.Entity.DynamicProxies.tbl\_Sports\_7461105FEAC4FCCBDED534FCE44707AF9C7DFE1E4AD69B1E7E3777FBB953F184'.", "ExceptionType":"Newtonsoft.Json.JsonSerializationException", "StackTrace":" at Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter writer, Object value, JsonContainerContract contract, JsonProperty member, JsonProperty property, JsonContract& memberContract, Object& memberValue)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)\r\n > at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)\r\n at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)\r\n at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, Encoding effectiveEncoding)\r\n at System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, Encoding effectiveEncoding)\r\n at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, HttpContent content)\r\n at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken)\r\n End of stack trace from previous location where exception was thrown at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.WebHost.HttpControllerHandler.d\_\_1b.MoveNext()", "InnerException":{"Message":"An error has occurred.", "ExceptionMessage":"The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.", "ExceptionType":"System.ObjectDisposedException", "StackTrace":" at System.Data.Entity.Core.Objects.ObjectContext.get\_Connection()\r\n at System.Data.Entity.Core.Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption)\r\n at System.Data.Entity.Core.Objects.ObjectQuery1.Execute(MergeOption System.Data.Entity.Core.Objects.DataClasses.EntityCollection1.Load(List1”:“System.Data.Entity.Core.Objects.DataClasses.EntityCollection1.Load(MergeOption mergeOption)\r\n at System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.DeferredLoad()\r\n at System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior.LoadProperty[TItem](TItem propertyValue, String relationshipName, String targetRoleName, Boolean mustBeNull, Object wrapperObject)\r\n at System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior.<>c\_\_DisplayClass72.b__1(TProxy mergeOption)\r\nat System.Data.Entity.Core.Objects.DataClasses.EntityCollection1.Load(List1集合,MergeOption mergeOption)\r\nat System.Data.Entity.Core.Objects.DataClasses.EntityCollection1.Load(MergeOption mergeOption)\r\n at System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.DeferredLoad()\r\n at System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior.LoadProperty[TItem](TItem propertyValue, String relationshipName, String targetRoleName, Boolean mustBeNull, Object wrapperObject)\r\n at System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior.<>c\_\_DisplayClass72.b__1(TProxy proxy,TItem item)\r\n 在System.Data.Entity.DynamicProxies.tbl_Sports_7461105FEAC4FCCBDED534FCE44707AF9C7DFE1E4AD69B1E7E3777FBB953F184.get_tbl_Tournament()\r\n 在Gettbl_Tournament(Object )\r\n 在Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object目标)“}

我是实体框架( Entity )和WebApi的新手,请求实体框架帮助我解决这个问题。

PFB带有错误消息的快照登录在fiddler上。当前收到Http 500内部服务器错误,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-18 04:40:19

这是因为您启用了延迟加载,并且在释放DbContext实例之后正在序列化对象图。所以发生了什么

  • 创建一个DbContext
  • 从DbContext中检索该类型的数据。
  • 将数据传递给结果方法。
  • 您的DbContext已关闭并已处置。
  • 你的方法存在
  • Asp.Net mvc管道现在尝试序列化结果的内容
  • 现在尝试在序列化过程中检索类型中的关系。
  • 由于启用了延迟加载,因此尝试从DbContext检索这些关系。
  • DbContext被释放,因此访问是不可能的,将引发异常。

若要修复它,请执行以下操作之一

  • 将DbContext移动到类范围,并在处理方法中对其进行处理(从ApiController重写现有方法)
  • (Recommended!)关闭大量加载,并指定要使用Include从返回类型中检索哪些属性。这将允许对检索的内容进行更细粒度的控制,并且更具有性能,因为所有内容都是在单个DB调用中检索的,而不是在访问时检索的。
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42874481

复制
相关文章
execjs使用时异常
我们execjs除了nodejs我们还需要浏览器环境,我们浏览器上还需要document以及window对象所有呢我们要安装环境
小小咸鱼YwY
2020/06/19
1.2K1
.Net5中WebApi使用MEF2框架的使用
最近有个产品需要设计重构,主要后端是C#和前端是Android程序,后端也考虑过微服务,但是觉得根据用户体量来说,有点太重了,但是也是想要团队分工,所以就考虑了MEF的方式,原来MEF的插件方式在《C# MEF插件的使用及Demo分享》的文章中介绍过,不过当时用的是WinForm版本,现在是要在NET5上使用,所以就专门做了DEMO程序来验证可行性。
Vaccae
2021/08/25
1K0
探讨通过Feign配合Hystrix进行调用时异常的处理
作者:任聪 原文:http://www.jianshu.com/p/f240ca7bb7c0 前言:此文所述处理方式为本人在实践过程中研究分析得出的一种解决方案。 本文不仅希望能为 SC 学习者提供一种如题问题的一种解决方案,并且希望通过本文引出各位 SC 的朋友对如题问题的共同探讨和最佳实践方案的分享。 场景及痛点 单个项目是通过 Jersey 来实现 restful 风格的架构 发生异常时异常信息总是提示没有回调方法,不能显示基础服务抛出的异常信息 暂时没有考虑发生异常之后进行回调返回特定内容 业务系统
程序猿DD
2018/02/01
2.3K0
windows窗体线程异常_指针在声明和使用时有何不同
大家好,又见面了,我是你们的朋友全栈君。 在多线程设计中,许多人为了省事,会将对话框类或其它类的指针传给工作线程,而在工作线程中调用该类的成员函数或成员变量等等。 但是在Debug版本时,在某些情况下,特别是在工作线程中调用pWnd->UpdateData(FALSE)时,会出现错误。 这个错误的原因网上有许多地方讲到了,但是,令人失望的是,讲得好的没几篇,都是非要讲什么线程模块状态什么的,让人看得云里雾里(不过,说实话,也就是从这些文章中才知道是怎么回事的)。
全栈程序员站长
2022/10/04
5180
如何对表操作进行监控
我们在跟踪定位一些系统问题的时候,经常需要知道哪些地方对一个表进行了操作,查询代码很麻烦,其实有一个简单的方法,就是跟踪表, 如下语句,就可以给表t_table增加监控了。
源哥
2018/08/28
6270
【Flask】Flask框架使用中异常捕获
抛出一个给定状态代码的 HTTPException,例如想要用一个页面未找到异常来终止请求,你可以调用 abort(404)。
天道Vax的时间宝藏
2021/08/11
9160
在Keras中如何对超参数进行调优?
由于没有一个成熟的理论来解释神经网络,所以配置神经网络通常是困难的,经常被同学们调侃为“炼丹”。
花落花飞去
2018/02/05
16.9K2
在Keras中如何对超参数进行调优?
Greenplum中对表批量授权
  DBA在管理数据仓库的时候,往往会创建多个帐号,每个帐号有不同的用途。因此这里就有不同帐号间表授权的需求。
lambgong
2018/10/03
2.9K0
在URL中实现简易的WebAPI验签
简易的 API url 签名验证中间件,通过简单的url参数验证请求是否合法。思路是按照微信公众平台的验证消息的确来自微信服务器[1]的方式来实现的。
桑榆肖物
2022/11/18
1.1K0
在URL中实现简易的WebAPI验签
如何使用R的sweep函数对表达矩阵进行标准化
我们知道一般做表达谱数据分析之前,第一步就是对我们的表达矩阵进行标准化(归一化),去除由于测序深度,或者荧光强度不均一等原因造成的表达差异。否则后续差异表达分析得到的差异基因,很可能并不是真正生物学意义上的差异,而是由于前面提到的这些原因造成的。
生信交流平台
2022/09/21
1.3K0
如何使用R的sweep函数对表达矩阵进行标准化
SpringBoot中使用注解对实体类中的属性进行校验
注意:这来要也别注意一下 @NotNull、@NotNull、@NotBlank以及@NotEmpty注解的区别
Java学术趴
2022/06/28
5.1K0
SpringBoot中使用注解对实体类中的属性进行校验
Android JNI 调用时的异常处理
可以看到异常的发生和处理基本都需要 Native 和 Java 交互,而对于 Native 自身出了异常,也就是 C/C++ 代码有问题,导致应用崩溃的又是另一回事了。
音视频开发进阶
2019/07/26
1.9K0
mysql分组和排序同时使用时查询数据异常
每个地点每天新增一条数据,要根据地点分组查询出每个设备最新的数据(按创建时间倒序)。
iiopsd
2022/12/23
2K0
在 ASP.NET Core 项目中使用 AutoMapper 进行实体映射
  在实际项目开发过程中,我们使用到的各种 ORM 组件都可以很便捷的将我们获取到的数据绑定到对应的 List<T> 集合中,因为我们最终想要在页面上展示的数据与数据库实体类之间可能存在很大的差异,所以这里更常见的方法是去创建一些对应于页面数据展示的 `视图模型` 类,通过对获取到的数据进行二次加工,从而满足实际页面显示的需要。
程序员宇说
2019/10/08
2.9K0
在 ASP.NET Core 项目中使用 AutoMapper 进行实体映射
DRF框架使用时的一些注意点
之前的文章代码块在安卓手机显示正常,但是苹果手机总是不能滚屏,非常影响阅读。今天总算解决了这个问题,苹果手机显示正常了。希望给大家带来最好的阅读体验。喜欢的话就点一下好看,关注一下本公众号吧。
小闫同学啊
2019/07/18
7310
对表型数据框进行去冗余
很明显,有些信息是冗余的,有些是有效信息可以用来分组,但是表型记录太多,看起来会混淆,所以需要去除那些冗余信息,就是在所有样本里面表型记录都一致的列。
生信技能树jimmy
2020/03/30
5320
springmvc之如何对表单数据进行校验
2、spring在进行数据绑定时,可同时调用校验框架完成数据校验工作。在springmvc中,可直接通过注解驱动的方式进行数据校验。
西西嘛呦
2020/08/26
7080
springmvc之如何对表单数据进行校验
DRF框架中csrf异常
如果在中间件中把'django.middleware.csrf.CsrfViewMiddleware',注释掉你用方法二的时候也会报错,只有方法一能正常使用
小小咸鱼YwY
2020/06/19
1K0
点击加载更多

相似问题

实体框架具有双向关联时出现Webapi异常

10

使用实体框架检索的WebApi 2

12

尝试使用实体框架进行SaveChanges时的异常

13

实体框架和webapi中的列表

211

实体框架WebAPI模型UpSerts

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文