首页 > 解决方案 > EF Core:我可以在我的实体中将可为空的 SQL 类型映射到不可为空的值类型吗?

问题描述

我有一个映射到以下实体的 SQL VIEW:

public class MyView {
   public string Name {get; set;}
   public int Count {get; set;}
}

我像dbContext.MyView.ToArrayAsync()ordbContext.MyView.Where(e => e.Count > 0)等​​一样使用它。

该视图在生产中的 Count 列中返回 NULL,并且在评估查询时我得到 NullReferenceExeption。

我可以配置映射以便将 NULL 值映射到default(int)resp0吗?

我尝试使用可为空的支持字段private int? _count,但仍然出现异常。要求是,除了实体本身或映射之外,我不想更改 SQL 视图或我的代码。

标签: c#sql-serverentity-framework-coreef-core-5.0

解决方案


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

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

  2. 我的建议是使用FirstOrDefualt()or .ToList()。如果没有找到记录,它将返回 null / count of 0,这样您就可以进行相应的查询。

IE:

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

这将为您提供一种处理空错误的可读方法。然后,如果您通过了检查,则可以携带其余数据。


推荐阅读