我在使用EF Core Code First创建的连接表时遇到问题。
这是我的班级结构:
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<FooBar> FooBars { get; set; }
}
public class Bar
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<FooBar> FooBars { get; set; }
}
public class FooBar
{
public int Id { get; set; }
public Models.Foo Foo { get; set; }
public Models.Bar Bar { get; set; }
public int Quantity { get; set; }
}
返回FooBar时我遇到的问题是Foo正确返回所选的Foo对象。而酒吧是空的。
我对数据的查询是这样完成的:
var foo = _context.Foo
.Include(r => r.FooBar)
.FirstOrDefault(x => x.Id == message.Id);
但是,在数据库中,它正确设置了bar的ID,如下所示:
SELECT [Id] [FooId] [BarId] ,[数量] 来自[dbo]。[FooBar]
Id FooId Quantity BarId 1 2 5 2
检查FooBar表上的Keys,我可以看到以下内容:
我做错了什么阻止Bar被退回? 目前没有什么是显而易见的。
欢呼声
答案 0 :(得分:1)
您需要通过使用ThenInclude链接来显式加载Bar。由于实体框架中的延迟加载行为,Bar不会被默认加载,以节省潜在的堆栈溢出并仅加载所需的内容。
因此,尽管Bar附加到FoorBar但未加载,因此为空。
答案 1 :(得分:0)
通过添加ThenInclude:
解决了这个问题var foo = _context.Foo
.Include(r => r.FooBar)
.ThenInclude(x => x.Bar)
.FirstOrDefault(x => x.Id == message.Id);
不知道为什么我必须在返回Foo时包含ThenInclude for Bar。如果有人对此有任何启示,那就太棒了。
感谢