实体框架核心空对象。我有一对一的实体关系。
public class Player
{
public int Id { get; set; }
public int? RatingId { get; set; }
public Rating Rating { get; set; }
}
public class Rating
{
public double Mean { get; set; }
}
在我的播放器控制器中,我返回
var player = await _context.Player.FindAsync(id);
然而这是我的json
{
"id": 3010,
"ratingId": 2009,
"rating": null,
"displayName": "Conor",
"partialPlayPercentage": 0.5,
"partialUpdatePercentage": 1
}
这里的评级应该是空的吗?
快车口 当我打电话时
var rating = await _context.Rating.FindAsync(2009);
我得到正确的评分
这里的评级应该是空的吗?
是的,除非启用了延迟加载,EF Core 中不是默认的。
我建议您阅读整个加载相关数据 EF Core 文档主题,其中解释了 3 种支持的模式 - 急切、显式和延迟加载。请注意,没有隐式加载,因此必须使用其中一个才能加载导航属性。
例如,显式加载:
var player = await _context.Player.FindAsync(id);
if (player != null)
_context.Entry(player).Reference(e => e.Rating).Load();
急切加载Include
/ThenInclude
是更自然的选择,但不能与Find
/FindAsync
一起使用,因此您需要像这样使用FirstOrDefault
/SingleOrDefault
(或它们的Async
对应物(:
var player = await _context.Player
.Include(e => e.Rating)
.FirstOrDefaultAsync(e => e.Id == id);