繁体   English   中英

EF6 Linq Query。仅包含返回子表的第一个条目

[英]EF6 Linq Query .Include only returning first entry of child table

我想检索一个给定的口袋妖怪的邂逅列表,因为口袋妖怪可以在很多地方遇到,所以我一直在尝试很多变种

var currentPokemon = _context.Pokemon
                                     .Where(mon => mon.Id == id)
                                     .Include(mon => mon.Encounters)
                                     .FirstOrDefault();

结果是一个包含所有相关数据的Pokemon对象,但只有FIRST遭遇被检索并放入一个集合中,结果如下:

在此输入图像描述

看看这个数据库,大约有20次遇到caterpie,我想要访问所有这些,但只是得到了它。

Pokemon类的外观(省略了相关字段):

[Table("pokemon")]
public partial class Pokemon {
    public Pokemon()
    {
        Encounters = new HashSet<Encounters>();
    }
    [Column("id")]
    public long Id { get; set; }
    [Required]
    [Column("identifier", TypeName = "VARCHAR(79)")]
    public string Identifier { get; set; }
    .
    .
    .

    [InverseProperty("Pokemon")]
    public virtual ICollection<Encounters> Encounters { get; set; }
 }

邂逅的样子:

public partial class Encounters {
    .
    .
    .
    [ForeignKey("PokemonId")]
    [InverseProperty("Encounters")]
    public virtual Pokemon Pokemon { get; set; }
}

Db数据:

在此输入图像描述

我在这里误解了什么?

我认为这是因为你正在调用.FirstOrDefault() ,它只获取第一个项目。 你可以省略并添加.ToList()吗? 另外, var currentPokemon似乎不是一个好的变量名。 你说你想要一份遭遇者名单,对吧? var pokemonEncounters怎么var pokemonEncounters

我认为问题在于您使用ForeignKey和InverseProperty设置关系的方式。

尝试重写为:

[Table("Pokemon")]
public class Pokemon
{
    public int Id { get; set; }
    public string Name { get; set; }

    [InverseProperty("Pokemon")]
    public ICollection<Encounter> Encounters { get; set; }

}

[Table("Enconters")]
public class Encounter
{
    public int Id { get; set; }

    public int PokemonId { get; set; }

    [ForeignKey("PokemonId")]
    public Pokemon Pokemon { get; set; }

}

我道歉,我一直在寻找错误的地方寻找答案。 在调试器中单步执行此操作后,我可以看到我的Pokemon查询确实返回了所需的结果:附加了许多遭遇的口袋妖怪。 我的问题似乎在其他地方(特别是:我看到的JSONified对象通过我的Web前端截断遇到的数组只包含第一个结果)。

我将发布一个带有正确问题的新问题,并在计算出来时从这里链接到它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM