Man*_*nju 3 c# entity-framework asp.net-web-api
我正在尝试使用Entity Framework创建一个WebApi来从数据库中读取数据.
我的数据模型设计如下所示:
我添加了一个名为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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在从浏览器调用我的WebApi控制器GET方法的请求时,我得到如下所示的异常.但是在调试模式下,我可以看到它能够从数据库中获取数据而没有任何错误,但是一旦控件移出方法,它就会抛出以下异常.
例外细节:
"消息":"发生了错误.",
"ExceptionMessage":"'ObjectContent`1'类型无法序列化内容类型'application/json; charset = utf-8'.",
"ExceptionType" 的响应正文:"System.InvalidOperationException",
"StackTrace":null,
"InnerException":{"消息":"发生错误.",
"ExceptionMessage":"从'System.Data.Entity'的'tbl_Tournament'获取值时出错. DynamicProxies.tbl_Sports_7461105FEAC4FCCBDED534FCE44707AF9C7DFE1E4AD69B1E7E3777FBB953F184' ",.
"ExceptionType":" Newtonsoft.Json.JsonSerializationException "
"堆栈跟踪":"
在Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(目标对象)\ r \n
在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter .CalculatePropertyValues(JsonWriter writer,JasonContainerContract契约,JsonProperty成员,JsonProperty属性,JsonContract&memberContract,Object&memberValue)\ r \n
在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer,Object value,JsonObjectContract契约,JsonProperty成员,JsonContainerContract collectionContract,JsonProperty containerProperty)\ r \n>在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer,Object value,JsonContract valueContract,JsonProperty成员,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
在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer,Object value, JsonContract valueContract,JsonProperty成员,JsonContainerContract containerContract,JsonProperty containerProperty)\ r \n
在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter,Object value,Type objectType)\ r \n
在Newtonsoft.Json.JsonSer ializer.SerializeInternal(JsonWriter jsonWriter,对象的值,类型的objectType个)\ r \n
在System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(类型类型,对象的值,流writeStream,编码effectiveEncoding个)\ r \n
在System.Net .Http.Formatting.JsonMediaTypeFormatter.WriteToStream(Type type,Object value,Stream writeStream,Encoding effectiveEncoding)\ r \n
在System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type,Object value,Stream writeStream,HttpContent content)\r \n
在System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(Type type,Object value,Stream writeStream,HttpContent content,TransportContext transportContext,CancellationToken cancellationToken)\ r \n从抛出异常的先前位置开始的堆栈跟踪结束
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务
)\ r \n
在System.Web.Http.WebHost.HttpControllerHandler.d__1b.MoveNext的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \n ()","InnerException":{"Message":"发生错误.",
"ExceptionMessage":"ObjectContext实例已被释放,不能再用于需要连接的操作.",
"ExceptionType":"System. ObjectDisposedException",
"StackTrace":"
在System.Data.Entity.Core.Objects.ObjectContext.get_Connection()\ r \n,
在System.Data.Entity.Core.Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption)\ r \n
在System. Data.Entity.Core.Objects.ObjectQuery 1.Load(List 1.Load(MergeOption mergeOption)\ 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.get_tbl_T 我的装饰()\ r \n 在Gettbl_Tournament(对象)\ r \n 在Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(对象目标)"}}}1.Execute(MergeOption mergeOption)\r\n
at System.Data.Entity.Core.Objects.DataClasses.EntityCollection1 collection, MergeOption mergeOption)\r\n
at System.Data.Entity.Core.Objects.DataClasses.EntityCollection
我是Entity Framework和WebApi的新手,要求我帮助解决这个问题.
PFB快照,并在fiddler上记录错误消息.目前得到Http 500内部服务器错误,
这是因为您启用了延迟加载,并且在处理DbContext实例后序列化对象图.发生了什么事
要解决此问题,请执行以下操作之一
Include.这将对检索的内容进行更细粒度的控制,并且性能更高,因为所有内容都是在单个数据库调用中检索而不是在访问时检索.| 归档时间: |
|
| 查看次数: |
3054 次 |
| 最近记录: |