是否可以一起使用Entity Framework,Web API?
申请结构:
在我的Web API应用程序中,我想使用DAL中的实体作为模型。
Web API控制器的数据返回应为JSON。
当我尝试它总是会出现这样的错误:
{“$ id”:“1”,“Message”:“发生错误。”,“ExceptionMessage”:“'ObjectContent 1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.","ExceptionType":"System.InvalidOperationException","StackTrace":null,"InnerException":{"$id":"2","Message":"An error has occurred.","ExceptionMessage":"Error while copying content to a stream.","ExceptionType":"System.Net.Http.HttpRequestException","StackTrace":null,"InnerException":{"$id":"3","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.Objects.ObjectContext.EnsureConnection()\r\n at System.Data.Objects.ObjectQuery
1.GetResults(Nullable 1 forMergeOption)\r\n at System.Data.Objects.ObjectQuery
1。 System.Collections.Generic.IEnumerable.GetEnumerator()\ r \ n at System.Collections.Generic.List 1..ctor(IEnumerable
1 collection)\ r \ n at System.Linq.Enumerable.ToList [TSource](IEnumerable`1源码)\ r \ n at Newtonsoft.Json.Serialization.JsonArrayContract.CreateWrapper(Object list)\ r \ n在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)\ r \ n在Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter,Object value)\ r \ n在Newtonsoft。 System.Net.Http.Formatting.JsonMediaTypeFormatter中的Json.JsonSerializer.Serialize(JsonWriter jsonWriter,Object value)\ r \ n。<> c_ Disp在System.Threading.Tasks.TaskHelpers.RunSynchronously(Action action,CancellationToken令牌)“}}}
这是我的控制器(当我使用Code First时,相同的代码正常工作)
public class TodoController : ApiController
{
// GET api/Todo
public IEnumerable<Todo> GetTodoItems(string q = null, string sort = null,
bool desc = false, int? limit = null, int offset = 0)
{
using (var db = new AdvanceContext())
{
var list = ((IObjectContextAdapter)db).ObjectContext.CreateObjectSet<Todo>();
IQueryable<Todo> items = string.IsNullOrEmpty(sort)
? list.OrderBy(o => o.Priority)
: list.OrderBy(String.Format("it.{0} {1}", sort, desc ? "DESC" : "ASC"));
if (!string.IsNullOrEmpty(q) && q != "undefined")
items = items.Where(t => t.Description.Contains(q));
if (offset > 0)
items = items.Skip(offset);
if (limit.HasValue)
items = items.Take(limit.Value);
return items;
}
}
}
答案 0 :(得分:0)
在您的上下文中添加以下行:
this.Configuration.LazyLoadingEnabled = true;
this.Configuration.ProxyCreationEnabled = false;
示例:强>
public partial class Dbname : DbContext
{
public Dbname()
: base("name=Dbname")
{
this.Configuration.LazyLoadingEnabled = true;
this.Configuration.ProxyCreationEnabled = false;
}
public virtual DbSet<dtproperty> dtproperties { get; set; }