我有一个SQL VIEW,它映射到以下实体:
public class MyView {
public string Name {get; set;}
public int Count {get; set;}
}
我像使用dbContext.MyView.ToArrayAsync()
或dbContext.MyView.Where(e => e.Count > 0)
等一样使用它
该视图在生产中的Count列中返回NULL,并且在评估查询时得到NullReferenceExeption。
我可以配置映射,使NULL值分别映射到default(int)
和0
吗
我尝试过使用可为null的backing字段private int? _count
,但仍然出现异常。要求是,除了实体本身或映射之外,我不想更改SQL视图或我的代码。
这似乎是一个错误处理问题,而不是映射问题。我认为有几种方法可以处理这个问题:
-
是使用表达式体成员将
int
设置为0-在您的情况下,我认为这不是最佳选项,因为问题再次与错误处理有关。 -
我的建议是使用
FirstOrDefualt()
或.ToList()
。如果没有找到记录,它将返回null/count为0,这样您就可以进行相应的查询。
I.E.:
var record = dbContext.MyView.Where(e => e.Count > 0).FirstOrDefault();
var found = record != null ? record : 0;
或者:
var records = dbContext.MyView.Where(e => e.Count > 0).ToList();
var found = records.Count() > 0 ? records : new List<T>();
这将为您提供一种可读的方法来处理null错误。然后,如果你通过了检查,你就可以把剩下的数据带来。