为了账号安全,请及时绑定邮箱和手机立即绑定

Npgsql,保存日期时间值时出错(“CreatedAt”列中的空值违反了非空约束)

Npgsql,保存日期时间值时出错(“CreatedAt”列中的空值违反了非空约束)

C#
MM们 2023-07-09 09:41:06
我有以下模型:public class Product{    public int Id { get; set; }    public string Name { get; set; }    public string Description { get; set; }    public string Category { get; set; }    public decimal Price { get; set; }    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]    [ScaffoldColumn(false)]    public DateTime CreatedAt { get; set; } = DateTime.Now;}以及以下应用程序上下文:public class ApplicationContext : DbContext{    private readonly string _connectionString;    public DbSet<Product> Products { get; set; }    public ApplicationContext(IConfiguration configuration)    {        _connectionString = configuration.GetConnectionString("Sportshop");    }    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)    {        optionsBuilder.UseNpgsql(_connectionString, b => b.MigrationsAssembly("Web"));    }}接下来我将向您展示我的 PostgreSQL 数据库架构的屏幕:我试图在下一个代码的帮助下保存一个新实体:    public ViewResult Index()    {        Product product = new Product        {            Name = "P1",            Category = "test",            Price = 1000,            Description = "Hello !!!"        };        _applicationContext.Products.Add(product);        _applicationContext.SaveChanges();        return View(// ... some view data);    }但结果我看到了这个错误。我不明白为什么。我绝对确定CreatedAt保存期间该字段不为空。查看调试屏幕:错误在哪里?
查看完整描述

1 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

你的财产确实有价值,但它也有装饰[DatabaseGenerated(DatabaseGeneratedOption.Computed)]

通过使用Computed,您告诉 EF Core 必须将属性的值保留给数据库。换句话说,数据库完全负责在每次查询期间生成或计算值。

生成的插入语句将如下所示

INSERT INTO Products (Id, Name, Description, Category, Price) ...

这将失败,因为CreatedAt有 NOT NULL 设置,显然没有默认值。

您可以尝试使用 Fluent API 为该字段指定默认值:

protected override void OnModelCreating(ModelBuilder modelBuilder)

{

    modelBuilder.Entity<Product>()

        .Property(b => b.CreatedAt)

        .HasDefaultValueSql("getdate()");

}

只要 Npgsql 支持,它就应该有效,但我不确定。如果它不起作用,那么您可能别无选择,只能删除该属性并将价值创造掌握在自己手中。


查看完整回答
反对 回复 2023-07-09
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信