我已经成功地在EF 6实体上配置了一个DateOnly属性,如下所示
除了该属性是可空的这一事实之外,一切都很正常。当我试图过滤Prperty1 < [some-date]所在的实体时,会出现这个问题,因为EF并不认为null比任何东西都小,所以它被排除在结果之外。
如何让EF理解null在过滤该属性时基本上小于或等效于DateOnly.MinValue?
我已经尝试过在我的转换器中用DateOnly替换DateOnly?,但这并没有什么区别。
public class MyEntity
{
public DateOnly? Property1 { get; private set; }
}配置:
builder
.Property(x => x.Property1)
.HasConversion(DateOnlyRelationalTypeMapping.Converter)
.HasColumnType("date");关系类型映射:
public sealed class DateOnlyRelationalTypeMapping : RelationalTypeMapping
{
internal DateOnlyRelationalTypeMapping()
: this(
new RelationalTypeMappingParameters(
new CoreTypeMappingParameters(
typeof(DateOnly),
Converter),
"date"))
{
}
private DateOnlyRelationalTypeMapping(RelationalTypeMappingParameters parameters)
: base(parameters)
{
}
public static new readonly ValueConverter<DateOnly, DateTime> Converter =
new(
clrValue => clrValue.ToDateTime(TimeOnly.MinValue),
dbValue => DateOnly.FromDateTime(dbValue));
protected override RelationalTypeMapping Clone(RelationalTypeMappingParameters parameters)
=> new DateOnlyRelationalTypeMapping(parameters);
}发布于 2022-06-07 11:26:58
你可以自己加上那张支票。
而不是依赖EF:
dbContext.Entities.Where(e => e.Property1 < someDate); // does not work添加包含有null日期的实体的约束:
dbContext.Entities.Where(e => e.Property1 != null || e.Property1 < someDate);请注意,此行为与EF无关。这就是SQL比较值的方式。与任何事物相比,DB NULL返回布尔结果NULL --既不为真,也不为假。当SQL WHERE子句中包含布尔检查时,除true以外的任何值(也代表NULL )都将被排除在输出之外。
发布于 2022-06-07 11:29:58
比较应该是:DateOnly属性是空的还是小于指定的命运?
.....Where(x => x.Property1 == null || x.Property1 < targetDate);https://stackoverflow.com/questions/72530263
复制相似问题