我想检索一个给定的口袋妖怪的邂逅列表,因为口袋妖怪可以在很多地方遇到,所以我一直在尝试很多变种
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数据:
我在这里误解了什么?
答案 0 :(得分:0)
我认为是因为你正在调用.FirstOrDefault()
,这只是第一项。你可以省略它并添加.ToList()
吗?此外,var currentPokemon
似乎不是一个好的变量名称。你说你想要一份遭遇者名单,对吧? var pokemonEncounters
怎么样?
答案 1 :(得分:0)
我认为问题在于您使用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; }
}
答案 2 :(得分:0)
道歉,我一直在寻找错误的地方寻找答案。在调试器中单步执行此操作后,我可以看到我的Pokemon查询确实返回了所需的结果:附加了许多遭遇的口袋妖怪。我的问题似乎在其他地方(具体来说:我看到JSONified对象看到我的网络前端截断遇到的数组只包含第一个结果)。
我会发布一个包含正确问题的新问题,并在找到问题时从此处链接到该问题。