バックグラウンド
フィールド TimestampCreation は、DB で次のように作成されます。
[TimestampCreation] [datetime2](7) NOT NULL
次のようにフィールドをデータテーブルに追加すると:
table.Columns.Add(new DataColumn("TimestampCreation", typeof(DateTime)));
値は次のように保存されるため、精度が失われます。
2016-12-07 11:38:39.4990000
あるべきとき
2016-12-07 11:38:39.4998426
私が試した1つの解決策
次のように列を追加すると:
table.Columns.Add(new DataColumn("TimestampCreation", typeof(string))); // Actually datetime2
値はDBに正しく保存されますが、これは汚い/ハッキーに感じます.
コードでの使用
値は次のように設定されます。
public static void AddToTable(this EntityDto source, DataTable table)
{
var row = table.NewRow();
...
...
row["TimestampLastModification"] = source.TimestampLastModification;
table.Rows.Add(row);
}
source.TimestampLastModification
のタイプは次のDateTime
とおりです。
public DateTime TimestampLastModification { get; set; }
次に、データテーブルは次のようにストレージに保存されます。
Root.PluginManager().PersistentStorage(ParametersHelper.OverallSchema).Insert(ref table)
質問
datetime2
フィールドをデータ列に追加し、期待される精度を維持する適切な方法は何ですか?