亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 165 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號