使NPoco考虑数据库默认值

noz*_*man 7 .net c# postgresql npoco

table在我的数据库中给出以下内容(PostgreSQL)

CREATE TABLE produkt (
    id SERIAL NOT NULL,
    name VARCHAR(50),
    created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT timezone('utc'::text, now())
);

ALTER TABLE produkt ADD CONSTRAINT produkt_pkey PRIMARY KEY (id);
Run Code Online (Sandbox Code Playgroud)

我想使用NPoco来访问使用此poco的数据

[TableName("produkt"), PrimaryKey("id", AutoIncrement = true)]
public class Product
{
    [Column("id")]
    public int Id { get; set; }

    [Column("name")]
    public string Name { get; set; }

    [Column("created_at")]
    public DateTime CreatedAt { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我打电话的时候

var product = new Product
{
    Name = "My new Product"
};

Database.Insert(product);  // or Database.Save<Product>(product);
Run Code Online (Sandbox Code Playgroud)

created_at-column是-infinity,即使default价值已被宣布.有没有什么办法解决这一问题?一种替代方法是在应用程序中设置日期,但我宁愿使用default数据库中的值实现此功能.

小智 -2

尝试使 CreatedAt 可为空:

[Column("created_at")] public Nullable<DateTime> CreatedAt { get; set; }

或在构造函数中设置其值,如下 所示

  • 嘿,谢谢你的回答。我尝试了“Nullable&lt;DateTime&gt;”和“DateTime?”,但都没有成功。也许这是一个 Postgre 问题。我知道在 CTor 中设置日期是一种替代方案,但我更喜欢在数据库中设置它以保持一致。不管怎样,非常感谢! (2认同)