1

我正在尝试在 Web api 项目 ASP.NET MVC 4.0 RC 中使用 ODP.net 和实体框架的 Odata 过滤器。我想返回一个 IQueryable 的 OwnDTO 。我收到一个内部 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();
        }
    }

//非常简单的例子

 public class OwnDTO
    {
        public string Name;
    }

我不想使用我的 Oracle EF 生成的类 (DAO) 从我的 Get 返回,但我知道如果我用更友好的界面替换 EntityObject 可以。如果我返回 IEnumerable 它可以工作,但我想要 Odata 过滤器。


更新以防有人想要一个工作示例。应该在 linq 中使用 Automapper 或类似的,并且应该注入上下文。


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

                        };
            return query.AsQueryable();
        }
    }

这很好用,但看起来 Odata 在 RC 之后被删除了。所以我需要寻找另一条路。

4

1 回答 1

1

它确实可以在 RC 中使用,但在发布时可能无法在 RTM 中使用——目前还不太清楚。

你的问题是你正在处理你的上下文,因为你正在使用一个using块。因此,在检索数据之前会处理上下文。

因此,不要using在请求结束时注册您的对象以进行处置。Tugberk 在这里有一个帖子。

于 2012-08-01T15:06:13.310 回答