实体框架核心空对象一对一



实体框架核心空对象。我有一对一的实体关系。

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);

相关内容

  • 没有找到相关文章

最新更新