Entity framework 4 如何从Webapi Get返回IQueyrable DTO以便使用Odata过滤器

Entity framework 4 如何从Webapi Get返回IQueyrable DTO以便使用Odata过滤器,entity-framework-4,asp.net-mvc-4,asp.net-web-api,odata,odp.net,Entity Framework 4,Asp.net Mvc 4,Asp.net Web Api,Odata,Odp.net,我试图在web api项目ASP.net MVC 4.0 RC中使用ODP.net和实体框架的Odata过滤器。我想把自己的发票退给你。我得到一个内部500错误,没有任何细节。我知道webapi RC存在错误生成错误,但我不认为这是我的问题 Get http://localhost:51744/api/Owner called using Fiddler [Queryable] public IQueryable<OwnDTO> Get()

我试图在web api项目ASP.net MVC 4.0 RC中使用ODP.net和实体框架的Odata过滤器。我想把自己的发票退给你。我得到一个内部500错误,没有任何细节。我知道webapi RC存在错误生成错误,但我不认为这是我的问题

    Get http://localhost:51744/api/Owner  called using Fiddler




    [Queryable]
    public IQueryable<OwnDTO> Get()        
    {            
        using (Entities context = new Entities())
        {
            var query = from item in context.Owners
                        select
                        new OwnDTO
                        {
                            Name = item.Name

                        };
            return query.AsQueryable();
        }
    }
我不想使用Oracle EF生成的类(DAO)从Get返回,但我知道如果用更友好的接口替换EntityObject,我可以。如果我返回IEnumerable,它会工作,但我需要Odata过滤器


如果有人想要一个工作示例,请更新。。应该在linq中使用Automapper或simliar,并且应该注入上下文


[可查询]
公共IQueryable Get()
{            
{
var query=来自Hack中的项。\u EFContext.owner
选择
新主人
{
Name=项目名称
};
返回query.AsQueryable();
}
}

这很好,但看起来Odata在RC后被移除了。因此,我需要搜索另一条路径。

它在RC中确实有效,但在RTM中可能不起作用,当它发布时-还不太清楚

您的问题是,您正在处理上下文,因为您正在使用
using
块。因此,在检索数据之前,必须先处理上下文


因此,不要使用注册对象,以便在请求结束时进行处理。Tugberk有一个帖子。

它确实在RC中工作,但当它发货时,可能在RTM中不工作-还不太清楚

您的问题是,您正在处理上下文,因为您正在使用
using
块。因此,在检索数据之前,必须先处理上下文


因此,不要使用注册对象,以便在请求结束时进行处理。Tugberk有一篇帖子。

RTM中的[Queryable]属性似乎已消失。它在哪里?[Queryable]属性似乎已从RTM中消失。它在哪里?
 public class OwnDTO
    {
        public string Name;
    }
    [Queryable]
    public IQueryable<OwnDTO> Get()        
    {            
        {
            var query = from item in Hack._EFContext.Owners
                        select
                        new OwnDTO
                        {
                            Name = item.Name

                        };
            return query.AsQueryable();
        }
    }