c# - 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 视图或我的代码。
解决方案
这似乎是一个错误处理问题,而不是映射问题。我看到有几种方法可以解决这个问题:
是使用表达式主体成员设置
int
为 0 - 在您的情况下,我不认为它是最佳选择,因为同样,问题与错误处理有关。我的建议是使用
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>();
这将为您提供一种处理空错误的可读方法。然后,如果您通过了检查,则可以携带其余数据。
推荐阅读
- ios - 使用 iOS 推送证书,为什么拥有 SSL 证书可以让 Apple 知道他们正在连接的服务器是您的服务器?
- django - 按日期排序博客文章评论 DJANGO
- javascript - Invariant Violation 文本字符串必须在
零件 - python - 运行测试时烧瓶单元测试无法连接到sqlite数据库
- python - 覆盖 Django 的 AuthenticationForm 的字段
- c# - ICAL.NET 重复元素:从开始日期到结束日期的每周二(每周)、每第二个、上周一(每月)
- javascript - TypeError: message.guild.channels.find(...).then 不是函数
- c# - 实体框架和关系有问题
- java - EditText 无法将文本设置为格式化字符串
- ruby-on-rails - 我无法执行 rake db:migrate - Unexpected ':'