【发布时间】: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 提供程序的错误吗?
使用的各种包的版本是
- EntityFramework 6.1.0-beta1
- Microsoft ASP.NET Web API 2.1 Odata 版本 5.1.1
- .Net 4.5 VS2012
【问题讨论】:
-
您手动加入是否有原因?您可以利用的实体之间是否没有定义关系?
-
这是一个简化版的问题,但是这些实体之间没有正式的关系
标签: c# linq entity-framework asp.net-web-api odata