2014-02-27 39 views
1

我是Web API Odata的新手,在構建多個鍵上具有連接的控制器時,似乎並未生成正確的Sql語句。使用Web API OData的多鍵加入

我必須指出,在控制檯應用程序中單獨使用Entity Framework會產生預期的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-β1
  2. 微軟的ASP.NET Web API的OData 2.1版本5.1.1
  3. .NET 4.5 VS2012
+0

您有手動加入的原因嗎?您可以利用哪些實體之間沒有定義關係? – Dismissile

+0

這是一個簡化版本的問題,但沒有這些實體之間沒有正式關係 –

回答

0

我認爲這是EntityFramework 6.1.0-beta1中的一個問題,將在6.1版本中修復。 https://entityframework.codeplex.com/workitem/2093

+0

我正在使用版本6.1.0-beta1,它在控制檯應用程序中正常工作 –

+0

但是,我無法重新制作它。上面的鏈接中的任何評論有幫助嗎?也許你可以嘗試夜間構建版本的實體框架。 –