使用 PetaPoco(和 Npgsql)的默认值向 PostgreSQL 插入一条新记录
Inserting a new record to PostgreSQL with default values from PetaPoco (and Npgsql)
在 PostgreSQL (9.5) 中,我有以下 table 定义:
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 值被赋予新记录的 "timestamp"。我该如何解决这个问题,以便使用 PostgreSQL DEFAULT 值?
(我可以在创建 newicd9 实例时为时间戳赋值,但我希望 PostgreSQL 使用 DEFAULT now() 方法为其赋值)。
非常感谢任何帮助。
编辑:icd9 class 由 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; }
}
当您将 SQL INSERT
执行到 table 时,如果您为列提供了一个值,那么即使有一个默认值,该值也会被存储专栏。
应用默认值的唯一方法是不将列包含在 SQL INSERT
语句中。
检查 PetaPoco 源代码,我可以看到它使用除以下所有列之外的所有列构造 INSERT
语句:
- 列标记为 'result columns'
- 主键列
您可以将此时间列标记为结果列(通过使用 [ResultColumn]
装饰),但根据我对代码的阅读,这也会将其从自动生成的 SELECT
子句中排除。
免责声明:虽然我对 postgresql 有所了解,但对 .NET 或 petapoco 却一无所知!
在 PostgreSQL (9.5) 中,我有以下 table 定义:
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 值被赋予新记录的 "timestamp"。我该如何解决这个问题,以便使用 PostgreSQL DEFAULT 值?
(我可以在创建 newicd9 实例时为时间戳赋值,但我希望 PostgreSQL 使用 DEFAULT now() 方法为其赋值)。
非常感谢任何帮助。
编辑:icd9 class 由 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; }
}
当您将 SQL INSERT
执行到 table 时,如果您为列提供了一个值,那么即使有一个默认值,该值也会被存储专栏。
应用默认值的唯一方法是不将列包含在 SQL INSERT
语句中。
检查 PetaPoco 源代码,我可以看到它使用除以下所有列之外的所有列构造 INSERT
语句:
- 列标记为 'result columns'
- 主键列
您可以将此时间列标记为结果列(通过使用 [ResultColumn]
装饰),但根据我对代码的阅读,这也会将其从自动生成的 SELECT
子句中排除。
免责声明:虽然我对 postgresql 有所了解,但对 .NET 或 petapoco 却一无所知!