Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架对独立关联的查询是否会创建过于复杂的查询?_Entity Framework_Ef Code First_Entity Framework 5 - Fatal编程技术网

Entity framework 实体框架对独立关联的查询是否会创建过于复杂的查询?

Entity framework 实体框架对独立关联的查询是否会创建过于复杂的查询?,entity-framework,ef-code-first,entity-framework-5,Entity Framework,Ef Code First,Entity Framework 5,我首先使用EF5和代码创建一个项目 在我的对象设计中,我使用了“独立关联”,在本例中,“FarmWhereCowLifes”属性是一个“独立关联” public class Cow { public int CowId public string Name public DateTime Birthday public Farm FarmWhereCowLives } public class Farm { public int Far

我首先使用EF5和代码创建一个项目

在我的对象设计中,我使用了“独立关联”,在本例中,“FarmWhereCowLifes”属性是一个“独立关联”

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分析器中看到)似乎过于复杂

乙二醇

问题是:

  • 嵌套的select有什么用
  • 为什么EF没有编写更高效的查询?例如没有嵌套的select
  • 我应该为cow对象添加外键关联吗?我不应该为了让EF执行一个写得很好的查询而这样做,是吗
  • 也许我做错了什么

    干杯
    Andrew

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

    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'