2016-10-06 4 views
0

В PostgreSQL (9,5), у меня есть следующие определения таблицы:Вставка новой записи в PostgreSQL со значениями по умолчанию из PetaPoco (и Npgsql)

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); 
    } 

Выполнение ввода (newicd9) с результатами PetaPoco/Npgsql приводит к no Значение, присвоенное «временной отметке» новой записи. Как исправить это так, что используется значение PostgreSQL DEFAULT?

(Я могу присвоить отметке времени значение при создании экземпляра newicd9, но я бы хотел, чтобы PostgreSQL назначил его методом DEFAULT now()).

Любая помощь очень ценится.

Edit: Класс ICD9 определяется шаблоном PetaPoco Т4 как:

[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

Как вы определяете класс icd9? – harmic

+0

@harmic Класс icd9 определяется шаблоном PetaPoco T4. См. Дополнительную информацию. Благодарю. –

ответ

1

При выполнении SQL INSERT в таблицу, если указать значение для столбца, то это значение будет сохранено даже если для столбца было значение по умолчанию.

Единственный способ применения по умолчанию для столбца не включать в инструкцию SQL INSERT.

Проверка исходного кода PetaPoco, я могу видеть, что он строит INSERT заявление, используя все столбцы, кроме:

  • Колонны помечена как
  • ключевого столбца первичного «столбцов результата»

Вы может пометить этот столбец времени в качестве столбца результата (путем декорирования [ResultColumn]), но по моему чтению кода, который также исключил бы его из автоматически сгенерированных статей SELECT.

Отказ от ответственности: Хотя я немного знаю о postgresql, я ничего не знаю о .NET или petapoco!

+0

Спасибо. Используя Trigger with Before Insert, я могу заставить timestamp на null. Еще раз спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^