如何解决按空值过滤的内存数据库不起作用
我有一段工作代码,我想用单元测试来覆盖它。然而,微软的内存数据库返回了一些意想不到的值。
如果我这样查询
var count = query.Count(c => c.Birthday2000 != null);
结果是 0,虽然应该是 12。
如果我这样查询
var count = query.ToList().Count(c => c.Birthday2000 != null);
结果是 12,这是预期的。
如果我用我的关系数据库 (MysqL) 运行它,第一行也能工作。
我有以下模型
public class Customer
{
public DateTime? BirthDay {get; set; }
private DateTime? _birthday2000;
public DateTime? BirthDay2000
{
get
{
if (BirthDay == null) _birthday2000 = null;
else _birthday2000 = new DateTime(2000,BirthDay.Value.Month,BirthDay.Value.Day);
return _birthday2000;
}
set => _birthday2000 = value;
}
}
什么可能导致这个问题?
我的目标是查询数据库中接下来的 n 个生日。我无法对 BirthDay 进行排序和过滤,因为年份部分不同,这就是我引入 BirthDay2000 属性的原因,其中年份设置为固定年份。
当我通过网络服务接收新客户时,我使用自定义 g/setter 自动设置它。
解决方法
您的 BirthDay2000
不仅在将 EF.Core 映射到任何类型的数据库时无效(ORM 使用数据对象,而不是逻辑对象),而且就属性而言,它也相当无效:你的吸气剂有副作用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。