C# WebAPI中使用实体框架对表执行GET调用时出现异常

C# WebAPI中使用实体框架对表执行GET调用时出现异常,c#,entity-framework,asp.net-web-api,C#,Entity Framework,Asp.net Web Api,我正在尝试创建一个WebApi,使用实体框架从DB读取数据 我的数据模型设计如下所示: public class SportsController : ApiController { public HttpResponseMessage Get() { try { using (MyLeagueDBEntities dbEntity = new MyLeagueDBEntities()) {

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

我的数据模型设计如下所示:

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);
        }
    }
}

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

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方法的请求时,我得到如下所示的异常。但在调试模式下,我可以看到它能够从数据库中获取数据而没有任何错误,但是一旦控件移出该方法,它就会抛出下面的异常

例外情况详情:

“消息”:“发生错误。”,
“ExceptionMessage:“'ObjectContent'1'类型未能序列化内容类型'application/json;charset=utf-8'的响应正文”。,
“异常类型”:“系统无效操作异常”,
“StackTrace”:空,
“InnerException”:{“Message”:“发生错误。”,
“例外消息”:“从'System.Data.Entity.DynamicProxies.tbl_Sports_7461105FEAC4FCCBDED534FCE44707AF9C7DFE1E4AD69B1E7E3777FBB953F184'上的'tbl_锦标赛'获取值时出错”,
“ExceptionType”:“Newtonsoft.Json.JsonSerializationException”,
“StackTrace”:“
在Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(对象目标)\r\n
在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter编写器、对象值、JsonContainerContract、JsonProperty成员、JsonProperty属性、JsonContract和memberContract、对象和成员值)\r\n
位于Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter编写器、对象值、JsonObjectContract合约、JsonProperty成员、JsonContainerContract集合合约、JsonProperty containerProperty)\r\n>位于Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter编写器,对象值,JsonContract valueContract,JsonProperty成员,JsonContainerContract containerContract,JsonProperty containerProperty)\r\n
在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter编写器、IEnumerable值、JsonArrayContract契约、JsonProperty成员、JsonContainerContract集合契约、JsonProperty容器属性)\r\n
位于Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter编写器、对象值、JsonContract valueContract、JsonProperty成员、JsonContainerContract容器合同、JsonProperty容器属性)\r\n
在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.serializate(JsonWriter,对象值,类型objectType)\r\n
在Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter JsonWriter,对象值,类型objectType)\r\n
在System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(类型类型、对象值、流writeStream、编码有效编码)\r\n
在System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(类型类型、对象值、流writeStream、编码有效编码)\r\n
在System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(类型类型、对象值、流writeStream、HttpContent内容)\r\n
在System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(类型类型、对象值、流writeStream、HttpContent内容、TransportContext TransportContext、CancellationToken CancellationToken)\r\n

来自引发异常的上一个位置的堆栈结束跟踪

在System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccess(任务任务)时\r\n
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中\r\n
在System.Web.Http.WebHost.HttpControllerHandler.d_u1b.MoveNext()中

“InnerException”:{“Message”:“发生错误。”,
“ExceptionMessage”:“ObjectContext实例已被释放,不能再用于需要连接的操作。”,
“异常类型”:“System.ObjectDisposedException”,
“StackTrace”:“
位于System.Data.Entity.Core.Objects.ObjectContext.get\u Connection()\r\n
位于System.Data.Entity.Core.Objects.ObjectQuery
1.GetResults(可为Null
1 forMergeOption)\r\n
位于System.Data.Entity.Core.Objects.ObjectQuery
1.Execute(合并选项
合并选项)\r\n
在System.Data.Entity.Core.Objects.DataClasses.EntityCollection中加载(列表
1
集合,合并选项合并选项)\r\n
在System.Data.Entity.Core.Objects.DataClasses.EntityCollection中加载(合并选项 合并选项)\r\n
位于System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.DeferredLoad()\r\n
位于System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior.LoadProperty[TItem](TItem propertyValue,String relationshipName,String targetRoleName,Boolean mustBeNull,Object wrapperObject)\r\n
在System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior.c__DisplayClass7`2.b__1(TProxy代理,TItem项)\r\n
在System.Data.Entity.DynamicProxies.tbl_Sports_7461105FEAC4FCCBDED534FCE44707AF9C7DFE1E4AD69B1E7E3777FBB953F184.获取tbl_锦标赛()\r\n
在Gettbl\u锦标赛(对象)上\r\n
位于Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(对象 目标“}}”

我是实体框架和WebApi的新手,希望有人能帮助我解决这个问题

PFB在fiddler上记录错误消息的快照。当前获取Http 500内部服务器错误


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

  • 您可以创建一个DbContext
  • 您可以从DbContext中检索该类型的数据
  • 将数据传递给Result方法
  • 您的DbContext已关闭并释放
  • 你的方法存在
  • Asp.NETMVC管道现在尝试序列化结果