我首先使用 EF5 和代码创建一个项目。
在我的对象设计中,我在这种情况下使用了“独立关联” ,属性“FarmWhereCowLives”是一个“独立关联”。
public class Cow
{
public int CowId
public string Name
public DateTime Birthday
public Farm FarmWhereCowLives
}
public class Farm
{
public int FarmId
public string Name
public string Suburb
}
然而,当我去运行一个查询时,要求实体框架通过传入农场 ID 来为特定农场选择最新的奶牛......例如:
_dbset.AsQueryable().Where(c => c.FarmWhereCowLives.FarmId == 1).OrderByDescending(c => c.Birthday).Take(1).Single()
(我使用通用存储库以防万一,但我不这么认为)
执行的 sql(我可以在 SQL profiler 中看到)似乎过于复杂?
例如
SELECT TOP (1)
[Project1].[CowId] AS [CowId],
[Project1].[Name] AS [Name],
[Project1].[Birthday] AS [Birthday],
[Project1].[FarmWhereCowLives_FarmId] AS [FarmWhereCowLives_FarmId]
FROM
(
SELECT
[Extent1].[RateChangeId] AS [RateChangeId],
[Extent1].[CowId] AS [CowId],
[Extent1].[Name] AS [Name],
[Extent1].[Birthday] AS [Birthday],
[Extent1].[FarmWhereCowLives_FarmId] AS [FarmWhereCowLives_FarmId]
FROM [dbo].[Cow] AS [Extent1]
WHERE [Extent1].[FarmWhereCowLives_FarmId] = 1
)
AS [Project1]
ORDER BY [Project1].[Birthday] DESC'
问题是:
- 嵌套选择是怎么回事?
- 为什么 EF 没有编写更高效的查询?例如没有嵌套选择?
- 我应该为牛对象添加外键关联吗?我不应该这样做来让 EF 执行编写良好的查询,对吗?
也许我在这里做错了什么?
干杯安德鲁