0

我首先使用 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'

问题是:

  1. 嵌套选择是怎么回事?
  2. 为什么 EF 没有编写更高效的查询?例如没有嵌套选择?
  3. 我应该为牛对象添加外键关联吗?我不应该这样做来让 EF 执行编写良好的查询,对吗?

也许我在这里做错了什么?

干杯安德鲁

4

1 回答 1

0

EF 总是使用嵌套查询——我以某种方式期望它也会使用嵌套查询来进行 FK 关联。这并不一定意味着查询不正确。数据库中的查询优化器可以在执行前简化查询。

于 2012-08-01T07:56:40.090 回答