【问题标题】:Multi key join with Web API OData使用 Web API OData 进行多键连接
【发布时间】:2014-03-31 10:49:07
【问题描述】:

我是 Web API Odata 的新手,在构建一个连接多个键的控制器时,它似乎无法生成正确的 Sql 语句。

我必须提到,在控制台应用程序中单独使用实体框架会产生预期的 Sql。

这是我的控制器

public class Vw_SearchEntityController : ODataController
{        
    private CatalogDb db;
    public Vw_SearchEntityController()
    {
        this.db = new CatalogDb();
    }


    [Queryable]
    public IQueryable<Vw_SearchEntity> Get()
    {
        var result = db.Vw_SearchEntity.Join(db.Vw_EntityType,
            o => new { TypeName = o.ClassType, Key = o.EntityId },
            i => new { TypeName = i.EntityTypeName, Key = i.EnumName },
            (s, i) => s);
        return result.AsQueryable();            
    }
}

它生成的sql是

SELECT ...
FROM  (SELECT 
...) AS [Extent1]
INNER JOIN (SELECT ... FROM [Tenant].[Vw_EntityType] AS [Vw_EntityType]) AS [Extent2]
ON 1=0

如您所见,未生成 ON 子句。如果我修改 linq 语句以加入单个键,它工作正常。这是 OData 提供程序的错误吗?

使用的各种包的版本是

  1. EntityFramework 6.1.0-beta1
  2. Microsoft ASP.NET Web API 2.1 Odata 版本 5.1.1
  3. .Net 4.5 VS2012

【问题讨论】:

  • 您手动加入是否有原因?您可以利用的实体之间是否没有定义关系?
  • 这是一个简化版的问题,但是这些实体之间没有正式的关系

标签: c# linq entity-framework asp.net-web-api odata


【解决方案1】:

我认为这是 EntityFramework 6.1.0-beta1 中的一个问题,将在 6.1 版本中修复。 https://entityframework.codeplex.com/workitem/2093

【讨论】:

  • 我使用的是 6.1.0-beta1 版本,它可以在控制台应用程序中正常运行
  • 但是,我无法复制它。上面链接中的任何评论有帮助吗?也许你可以试试实体框架的夜间构建版本。
猜你喜欢
  • 1970-01-01
  • 2013-08-24
  • 2015-01-08
  • 2016-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多