【发布时间】:2019-06-20 04:05:28
【问题描述】:
让我们假设这种情况
实体
public virtual List<Address> AddressHistory { get; set; }
public Address Address
{
get
{
if (AddressHistory.Any())
{
return AddressHistory.OrderByDescending(x => x.CreationDate).FirstOrDefault();
}
return null;
}
}
根据条件请求地址时,如下所示:
dbContext.MyEntity.Where(e => e.Address.Street == "some stuff");
我得到一个空引用异常。
为什么?有没有办法让它工作?
编辑:对于那些认为地址可能为空的人,这样做时它可以工作:
dbContext.MyEntity.Where(e => e.AddressHistory.OrderByDescending(x => x.CreationDate).FirstOrDefault().Street == "some stuff");
编辑:对于将其标记为重复的人,我认为您不理解这里的问题。请去掉标记。
所以,总结一下:
如果我使用 getter => null 异常,因为子 (AdressHistory) 没有延迟加载。 如果我直接在 efcore 表达式中使用 getter 中的代码,它就可以工作。
这意味着在 EFCore 中使用 getter 不起作用。
【问题讨论】:
-
当没有 AddressHistory 时您返回 null,但您从不检查该场景是否在使用中。
-
您是否调试过
AddressHistory是否包含任何元素?另外,如果没有元素,LastOrDefault()会返回 null。基本上,你必须使用你的调试器 -
dbContext.MyEntity.Include("AddressHistory").Where(e => e.Address.Street == "some stuff");
-
@TonyAbrams 做一个包含不再是延迟加载对其他人来说,AdressHistory 显然不是空的
-
我编辑了问题以提供更多信息
标签: c# lazy-loading ef-core-2.1