实体框架 – Asp.Net Web API错误:’ObjectContent`1’类型无法将内容类型’application/xml; charset = utf-8′

最简单的例子,我收集并尝试通过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。希望它有帮助

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....