在PostgreSQL(9.5)中,我有以下表定义:
CREATE TABLE icd9
(
recid serial NOT NULL,
code text,
cdesc text NOT NULL,
"timestamp" timestamp without time zone DEFAULT now(),
CONSTRAINT pk_icd9_recid PRIMARY KEY (recid)
)
使用PetaPoco,我有以下声明:
icd9 newicd9 = db.SingleOrDefault<icd9>("select * from icd9 where lower(cdesc) = lower(@0)", newdx.cdesc);
if (newicd9 == null)
{
newicd9 = new icd9 { cdesc = newdx.cdesc.ToLower(), code = newdx.code};
db.Insert(newicd9);
}
使用PetaPoco / Npgsql执行Insert(newicd9)会导致 no 值被赋予&#34; timestamp&#34;新记录。如何修复此问题,以便使用 PostgreSQL DEFAULT值?
(我可以在创建newicd9实例时为时间戳赋值,但我希望PostgreSQL使用DEFAULT now()方法为其分配)。
非常感谢任何帮助。
编辑:ica9类由PetaPoco T4模板定义为:
[TableName("nova.icd9")]
[PrimaryKey("recid")]
[ExplicitColumns]
public partial class icd9 : chaosDB.Record<icd9>
{
[Column] public int recid { get; set; }
[Column] public string code { get; set; }
[Column] public string cdesc { get; set; }
[Column] public DateTime? timestamp { get; set; }
}
答案 0 :(得分:1)
当您在表中执行SQL INSERT
时,如果为列提供值,则即使该列存在默认值,也会存储该值。
应用默认值的唯一方法是不将列包含在SQL INSERT
语句中。
检查PetaPoco源代码,我可以看到它使用除以下列之外的所有列构造INSERT
语句:
您可以将此时间列标记为结果列(通过使用[ResultColumn]
进行装饰),但是通过阅读代码,也会将其从自动生成的SELECT
子句中排除。
免责声明:虽然我对postgresql有所了解,但我对.NET或petapoco一无所知!