我正在尝试创建一个WebApi来使用实体框架从DB读取数据。
我的数据模型设计如下:
我添加了一个名为WebApi的SportsController
控制器,如下所示:
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方法时,我将得到如下所示的异常。但是在调试模式下,我可以看到它能够从数据库中获得数据,不会出现任何错误,但是一旦控件移出该方法,它就会抛出下面的异常。
例外细节:
“消息”:“发生了错误”, “'ObjectContent
1' 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.ObjectQuery
1.GetResults(Nullable1 forMergeOption)\r\n at System.Data.Entity.Core.Objects.ObjectQuery
1.Execute(MergeOption System.Data.Entity.Core.Objects.DataClasses.EntityCollection1.Load(List
1”:“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\_\_DisplayClass7
2.b__1(TProxy mergeOption)\r\nat System.Data.Entity.Core.Objects.DataClasses.EntityCollection1.Load(List
1集合,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\_\_DisplayClass7
2.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内部服务器错误,
发布于 2017-03-18 04:40:19
这是因为您启用了延迟加载,并且在释放DbContext
实例之后正在序列化对象图。所以发生了什么
若要修复它,请执行以下操作之一
Include
从返回类型中检索哪些属性。这将允许对检索的内容进行更细粒度的控制,并且更具有性能,因为所有内容都是在单个DB调用中检索的,而不是在访问时检索的。https://stackoverflow.com/questions/42874481
复制相似问题