gpt4 book ai didi

.net - NHibernate Postgresql DateTime 到时间的转换

转载 作者:行者123 更新时间:2023-11-29 12:01:12 25 4
gpt4 key购买 nike

我正在使用 Fluent NHibernate 配置我的映射,在读取数据时一切正常,但在尝试插入或更新具有 Postgresql 类型时间的记录时,我收到错误消息

“错误:42804:列\”run_time\” 是带时区的时间类型,但表达式是不带时区的时间戳类型”

看起来 NHibernate 可能对将 DateTime 转换为哪个 DbType 感到困惑,正如您从 PostgreSQL and C# Datatypes 中看到的那样DateTime 映射到多个 DbType。

我还尝试从 IUserType 为该列指定一个自定义类型,但是在 NullSafeSet 覆盖上我得到一个 NullReferenceError

public override void NullSafeSet(IDbCommand cmd, object value, int index)
{
var obj = (DateTime)value;

NHibernate.NHibernateUtil.Time.NullSafeSet(cmd, obj, index);
}

我可以提供某种类型的提示来告诉 NHibernate 将 DateTime 转换为 Postgresql“时间”类型吗?还是我可以通过 IUserType 实现此目的而我只是做错了什么?

最佳答案

想通了!

显然是转换表 I linked to 要么是错误的,要么是过时的。事实证明,System.TimeSpan 对象是 Npgsql 正确转换为 Postgresql“时间”对象所需要的。在我看来,他们会尝试将代表两个时间之间差异的东西转换为我们认为的 HH:mm:ss,但事实就是这样,这似乎很奇怪。

我没有将我的 RunTime 属性的类型从 System.DateTime 更改为 System.TimeSpan,而是创建了一个自定义 IUserType 并覆盖了 NullSafeSet 以使其看起来像

public override void NullSafeSet(IDbCommand cmd, object value, int index)
{
var obj = (DateTime)value;

((IDbDataParameter) cmd.Parameters[index]).Value = new TimeSpan(0, obj.Hour, obj.Minute, obj.Second);
}

关于.net - NHibernate Postgresql DateTime 到时间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6129558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com