实体框架数据库首先使用Web API

时间:2014-02-09 23:27:57

标签: json entity-framework angularjs

是否可以一起使用Entity Framework,Web API?

申请结构:

  1. 使用AngularJS的Web API应用程序
  2. 数据访问层:使用实体框架
  3. 在我的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令牌)“}}}

    中的layClassd.b _c()\ r \ n

    这是我的控制器(当我使用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;
      }
     }
    }
    

1 个答案:

答案 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; }