我刚刚开始玩NPoco,但到目前为止我还没有找到我需要的文档。
例如,假设我有一个字段Created
,在我的域中是Instant
,但在我的数据库中设置为DateTimeOffset
。有没有办法让NPoco转换这些类型?
答案 0 :(得分:2)
这很简单。下面的示例是用于处理PostgreSQL日期时间类型的示例,但是您可以相当容易地调整此代码。
public class Mapper : DefaultMapper
{
public override Func<object, object> GetFromDbConverter(Type DestType, Type SourceType)
{
if (DestType == typeof(DateTimeOffset) || DestType == typeof(DateTimeOffset?)
|| DestType == typeof(DateTime) || DestType == typeof(DateTime?))
{
return x =>
{
if (x is NpgsqlTimeStampTZ)
{
if (DestType == typeof(DateTime))
return (DateTime)((NpgsqlTimeStampTZ)x);
if (DestType == typeof(DateTime?))
return (DateTime?)((NpgsqlTimeStampTZ)x);
if (DestType == typeof(DateTimeOffset))
return (DateTimeOffset)((NpgsqlTimeStampTZ)x);
if (DestType == typeof(DateTimeOffset?))
return (DateTimeOffset?)((NpgsqlTimeStampTZ)x);
}
if (x is NpgsqlTimeStamp)
{
if (DestType == typeof(DateTime))
return (DateTime)((NpgsqlTimeStamp)x);
if (DestType == typeof(DateTime?))
return (DateTime?)((NpgsqlTimeStamp)x);
}
if (x is NpgsqlDate)
{
if (DestType == typeof(DateTime))
return (DateTime)((NpgsqlDate)x);
if (DestType == typeof(DateTime?))
return (DateTime?)((NpgsqlDate)x);
}
return x;
};
}
return base.GetFromDbConverter(DestType, SourceType);
}
public override Func<object, object> GetToDbConverter(Type DestType, Type SourceType)
{
if (SourceType == typeof(Instance)) {
return x => { return ((Instance)x).ToDateTimeOffset(); } // etc or something like this
}
return base.GetToDbConverter(DestType, SourceType);
}
}
如果您有任何其他问题,请将问题发布到github上的问题页面。 干杯, 亚当
答案 1 :(得分:2)
我扩展了Schotime演示的接口,并为几种NodaTime类型构建了它。这里粘贴太大,所以here is a GIST。
请注意,它不包括ZonedDateTime
,它必须序列化到两个不同的字段,所以我不确定NPoco如何处理它。我也没有包含Period
,因为除了varchar
之外没有其他很好的对应类型。
警告:此代码完全未经测试。我只是将我对Noda Time转换的了解应用于另一个答案所示的覆盖。在使用您的代码之前,请仔细测试。