如果实体不存在,为什么存储库“ Get”和“ GetAsync”方法会抛出EntityNotFoundException而不是返回null?

时间:2019-05-09 11:50:47

标签: asp.net-core aspnetboilerplate

使用模块零核心模板(已完全更新),最近我遇到一个问题,当用户要求删除帐户时(这是第一次),我代码中的很多地方都获得了“ User”实体使用Repository.Get(TPrimaryKey id)或Repository.GetAsync(TPrimaryKey id):

var user = _userRepository.Get(model.UserId);

直到现在,我还没有意识到当实体不存在时,它会引发异常,但是我不得不用(或等效的异步)替换所有调用:

var user = _userRepository.FirstOrDefault(u => u.Id == model.UserId);

我的代码不是用来处理这种异常的,而只是返回一个空值。

我的问题是:

  • 为什么返回异常而不是null值?
  • 是否可以修改此行为?

先感谢

1 个答案:

答案 0 :(得分:1)

这是因为实现类似于that

如果要查找一个没有引发异常的实体,则必须使用FirstOrDefault(TPrimaryKey id) function

编辑(解释):

就像说Single(x => x.Id == 1)。您期望得到结果,如果没有结果,它将引发异常。这就是为什么我们有SingleOrDefault(expr)SingleOrDefault(expr)FirstOrDefault(expr)First(expr)的原因。涉及相同的校长