最简单的例子,我得到一个集合并尝试通过 Web API 输出它:
// GET api/items
public IEnumerable<Item> Get()
{
return MyContext.Items.ToList();
}
我收到错误:
对象类型
'System.Data.Objects.ObjectQuery`1[Dcip.Ams.BO.EquipmentWarranty]'
无法转换为类型
'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。
希望能帮助到你
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)