EF核心:我可以在实体中将可为null的SQL类型映射到不可为null值的类型吗



我有一个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视图或我的代码。

这似乎是一个错误处理问题,而不是映射问题。我认为有几种方法可以处理这个问题:

  1. 是使用表达式体成员将int设置为0-在您的情况下,我认为这不是最佳选项,因为问题再次与错误处理有关。

  2. 我的建议是使用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错误。然后,如果你通过了检查,你就可以把剩下的数据带来。

最新更新