最简单的例子,我收集并尝试通过Web API输出:
// GET api/items public IEnumerable<Item> Get() { return MyContext.Items.ToList(); }
我得到错误:
Object of type
‘System.Data.Objects.ObjectQuery`1[Dcip.Ams.BO.EquipmentWarranty]’
cannot be converted to type
‘System.Data.Entity.DbSet`1[Dcip.Ams.BO.EquipmentWarranty]’
这是一个很常见的错误,与新的代理,我知道,我可以通过设置:
MyContext.Configuration.ProxyCreationEnabled = false;
但是,这违背了我正在努力做的很多目的。有没有更好的办法?
解决方法
我建议仅在不需要或导致麻烦的地方禁用代理创建。您不必全局禁用它,您只需通过代码禁用当前的数据库上下文…
[HttpGet] [WithDbContextApi] public HttpResponseMessage Get(int take = 10,int skip = 0) { CurrentDbContext.Configuration.ProxyCreationEnabled = false; var lista = CurrentDbContext.PaymentTypes .OrderByDescending(x => x.Id) .Skip(skip) .Take(take) .ToList(); var count = CurrentDbContext.PaymentTypes.Count(); return Request.CreateResponse(HttpStatusCode.OK,new { PaymentTypes = lista,TotalCount = count }); }
这里我只是在这个方法中禁用了ProxyCreation,因为每个请求都创建了一个新的DBContext,因此我只禁用了这种情况下的ProxyCreation。希望它有帮助