当前位置: 首页 > 知识库问答 >
问题:

实体框架查询多个关系故障[重复]

公西翼
2023-03-14

我有三个实体类。

public partial class Person
{
    public Person()
    {
        this.Locations = new HashSet<Location>();           
    }    
    public int PersonID { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Location> Locations { get; set; }       
}

public partial class Location
{       
    public Location()
    {            
        this.People = new HashSet<Person>();
    }

    public int LocationID { get; set; }
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public int CityID { get; set; }           
    public virtual City City { get; set; }                    
    public virtual ICollection<Person> People { get; set; }
}

public partial class City
{
    public City()
    {
        this.Locations = new HashSet<Location>();
    }    
    public int CityID { get; set; }
    public string Name { get; set; }                         
    public virtual ICollection<Location> Locations { get; set; }
}

我正在尝试查询我的实体,并获得给定的人的所有位置。到目前为止我有这个方法。

public IQueryable<Person> GetLocationsForPerson(int id)
    {
        return context.People
                .Include(p => p.Locations)
                .Where(p => p.PersonID == id);

    }

问题是我还想为每个地点获得城市的名称。当我从Location表获取cityID时,Location实体的City属性返回NULL。为什么那是空的?我如何修改我的查询以获得城市名称?如有任何提示,将不胜感激。

共有1个答案

穆单鹗
2023-03-14

替换:

.Include(p => p.Locations)

与:

.Include(p => p.Locations.Select(l => l.City))

在EF Core中,您还可以:

.Include(p => p.Locations)
   .ThenInclude(l => l.City)
 类似资料:
  • 问题内容: 我正在将子系统从 NHibernate 移植到 Entity Framework, 并希望看到将以下查询移植到 EF 的最佳方法。 帐户余额类别为: 该表是: 示例数据是(使用数字ID可以更好地理解): 该 AccountBalanceByDate 实体持有某一天的账户余额。如果某天没有交易,则该天将没有 AccountBalanceByDate ,我们应该查看前几天以查看该帐户的余额

  • 问题内容: 我想建立这样的关系(一个区域在x个其他区域的附近) 不幸的是,这是行不通的,因为EF生成的FK不正确…我如何才能使像这样的结构起作用? 3个区域的示例:3 Zones: Zone 1, Zone 2, Zone 3 Zone 1 Neighours: Zone 2, Zone 3 Zone 2 Neighbours: Zone 1 Zone 3 Neighbours: Zone1 有什

  • 问题内容: 使用实体框架返回人名列表,其中人名包含字符串数组中的文本。 比方说: 和查询 这将编译并运行,但是该过程实际上是从数据库中调用所有记录,然后对返回的数据执行我的where子句。这是有道理的。 有没有一种方法可以重写查询,以便在SQL中生成where子句? 问题答案: 我假设dataContext.People是来自的,并且不涉及实现的指令,例如或。 答案在这里:http : //www

  • 问题内容: 我有两个表: 通常,我会创建一个映射表’ ‘来将这些表链接成多对多关系。 这是最好的方法吗?我应该将s的列表存储在xml列中,而不是存储在“事件”表中吗? 我使用带有Linq的.NET 3.5 / 4作为DAL(尽管我认为这可能与所提出的设计问题无关)。 有兴趣看看人们的意见是什么。 谢谢。戴夫 问题答案: 映射表绝对是执行此操作的最佳方法-实体框架会将映射表转换为两侧的实体集合,并且

  • 我有这样一个数据库模型: 所以我们有一个客户可以做一个订单。这个订单包括一个产品,这个订单包括一个名称。我现在尝试用如下所示的linq语句返回完整的模型: 但是不起作用,因为Orders是一个ICollection。来自德国的问候,并提前感谢任何帮助。

  • 问题内容: 我在TSQL中有以下查询 我在实体框架中有以下查询 当我尝试编译它时,我得到 错误3名称“ p”不在“等于”左侧的范围内。考虑在“等号”的任一侧交换表达式。 错误4名称“链接”不在“等于”右侧的范围内。考虑在“等号”的任一侧交换表达式。 问题答案: 错误究竟在说什么 应该 完整的代码