PostgreSQL で間隔列を実装しているときに遭遇した問題について助けが必要です。.NET ベースのクライアント アプリケーションを使用しています。
次のように Timespan オブジェクトを作成する場合:
TimeSpan startBalance = new TimeSpan(100, 0, 0); //100 hours
この値を Poco プロパティに次のように割り当てます。
//the poco property was generated as a string - not a Timespan - not sure why
Poco.Property = startBalance.ToString()
PetaPoco 挿入は、PostgreSQL データベースに次の間隔値を作成します。
「4 日 00:57:36」
以前に保存した間隔を含むレコードを取得しようとすると、com 例外が生成されます。
いくつかの注意事項...
データベース ファイル生成プロセス (POCO 作成) により、Timespan プロパティではなく、PostgreSQL 間隔列を表す文字列プロパティが作成されました。100 時間 (4 日と 4 時間) に等しい Timespan は、4 日 57 分 36 秒として挿入されます。取得が失敗し、「オブジェクトは IConvertible を実装する必要があります」というエラーが表示されます。interval フィールドを NULL に更新すると、取得が機能します。データ型マッピングの何かが正しくないようです。これについての私の理解では、PostgreSQL 間隔は NpgsqlDbType 間隔にマップされ、これは .NET TimeSpan にマップされるはずです。おそらく問題は、PetaPoco がデータ型を文字列として扱っていることですが、よくわかりません。達人が必要です。;-)