如何解决如果属性未更改,Npgsql.EntityFrameworkCore.PostgreSQL 尝试插入 NULL 值
我有一个包含两个整数列 Opens
和 UniqueOpens
的表。它们的默认值设置为 0。我使用 Scaffold-DBContext 为 DB 搭建了脚手架。我不知道为什么,但这些列上没有设置默认值。
我创建了一个新的空数据库,应用了迁移,创建了表(这些列没有默认值)。
我要插入数据:
es = new EmailDeviceStatistic()
{
Date = deviceStatisticResult.StatisticDate,Id = Guid.NewGuid(),Device = ds.Name
};
es.Opens = 0;
es.UniqueOpens = 0;
counter++;
this.Context.EmailDeviceStatistics.Add(es);
await this.Context.SaveChangesAsync();
没什么特别的。如您所见,我将 Opens
和 UniqueOpens
的值设置为 0(整数的默认值)。
通过保存我得到一个错误:
失败的行包含 (4f43b05f-82a1-412b-93bb-f137c2545a52,2021-02-13,桌面,空,空)。
如果我将这些属性设置为 1(从零开始),则没有问题并且会创建记录。看起来,如果您不更改属性值,提供程序会决定我要插入 NULL,并且由于该列没有默认值且设置为 NOT NULL,因此保存失败。
所以我有两个问题:
- 为什么 Scaffold-Context 不在列上创建默认值
- 为什么如果我不更改默认值会出现空值
编辑:EmailDeviceStatistic
-
Scaffold-Context
模型
public partial class EmailDeviceStatistic
{
public Guid Id { get; set; }
public DateTime Date { get; set; }
public string Device { get; set; }
public int Opens { get; set; }
public int UniqueOpens { get; set; }
}
EmailDeviceStatistic
生成的 Scaffold-Context
配置 -
modelBuilder.Entity<EmailDeviceStatistic>(entity =>
{
entity.ToTable("EmailDeviceStatistic");
entity.HasIndex(e => e.Date,"ix_emaildevicestatistic_date")
.HasNullSortOrder(new[] { NullSortOrder.NullsLast })
.HasSortOrder(new[] { SortOrder.Descending });
entity.HasIndex(e => new { e.Date,e.Device },"ix_emaildevicestatistic_date_device");
entity.Property(e => e.Id).HasDefaultValueSql("uuid_generate_v1()");
entity.Property(e => e.Date).HasColumnType("date");
entity.Property(e => e.Device)
.IsRequired()
.HasMaxLength(150);
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。