C# WebAPI中使用实体框架对表执行GET调用时出现异常
我正在尝试创建一个WebApi,使用实体框架从DB读取数据 我的数据模型设计如下所示: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()) {
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管道现在尝试序列化结果