如何解决DateTimeOffset 通过 EFCore 迁移变为可空
问题:EF Core 正在将 DateTimeOffset
转换为 DateTimeOffset?
(注意 ?
可为空的运算符)
设置:我有一个类似如下的类。
public class MyCoolObject
{
public int Id { get; private set; }
public DateRange DateRange { get; set; } = new DateRange(default,default);
...
private MyCoolObject() { }
public MyCoolObject(int id,DateRange dateRange,...)
{
Id = id;
DateRange = dateRange;
...
}
}
DateRange
在哪里
public class DateRange
{
public DateRange(DateTimeOffset startDate,DateTimeOffset? endDate)
{
if (!IsValid(startDate,endDate))
throw new ArgumentException("End date must be after start date");
StartDate = startDate;
EndDate = endDate;
}
public DateTimeOffset StartDate { get; }
public DateTimeOffset? EndDate { get; }
public static bool IsValid(DateTimeOffset startDate,DateTimeOffset? endDate)
{
return !endDate.HasValue || endDate >= startDate;
}
}
我的配置如下:
public class MyCoolObjectConfiguration : IEntityTypeConfiguration<MyCoolObject>
{
public void Configure(EntityTypeBuilder<MyCoolObject> builder)
{
...
builder.OwnsOne(e => e.DateRange,builder =>
{
builder.Property(e => e.StartDate).IsRequired().HasColumnName("StartDate");
builder.Property(e => e.EndDate).HasColumnName("EndDate");
});
...
}
}
EF 核心包:
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.9" />
不正确的结果:当我运行迁移时,实体有这样的东西:
StartDate = table.Column<DateTimeOffset>(nullable: true),EndDate = table.Column<DateTimeOffset>(nullable: true),
预期结果:注意 StartDate
不可为空
StartDate = table.Column<DateTimeOffset>(nullable: false),
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。