【发布时间】:2021-05-04 14:23:57
【问题描述】:
如何在 Linq2Db 中配置 T4 POCO 生成以生成使用 NodaTime 类型而不是 System.DateTime 的模型?
我正在使用带有 Npgsql 的 PostgreSQL。
【问题讨论】:
如何在 Linq2Db 中配置 T4 POCO 生成以生成使用 NodaTime 类型而不是 System.DateTime 的模型?
我正在使用带有 Npgsql 的 PostgreSQL。
【问题讨论】:
要替换标准 DateTime 类,您必须按以下方式修改 T4 模板:
// loading database schema
LoadPostgreSQLMetadata(...)
// modifying default mapping
foreach (var t in Tables.Values)
{
foreach (var c in t.Columns.Values)
{
switch (c.Type)
{
case "DateTime" : c.Type = "NodaTime.LocalDateTime"; break;
case "DateTime?" : c.Type = "NodaTime.LocalDateTime?"; break;
case "DateTimeOffset" : c.Type = "NodaTime.OffsetDateTime"; break;
case "DateTimeOffset?": c.Type = "NodaTime.OffsetDateTime?"; break;
}
}
}
// generating model
GenerateModel();
【讨论】:
LoadPostgreSQLMetadata(...) 调用之前添加了GetSchemaOptions.PreferProviderSpecificTypes = true;,以便更精细地控制日期和时间类型,并相应地调整映射。