gpt4 book ai didi

c# - IUserType 与 ODP.net 对应的 Int64

转载 作者:太空宇宙 更新时间:2023-11-03 14:23:21 24 4
gpt4 key购买 nike

我们有一个主要对应于 System.Int64 的自定义类型,用于我们的系统标识符(它对潜在的长值可以是什么提供了一些额外的限制)。

我们还定义了一个 IUserType 以允许我们将此类型的属性映射到 NHibernate,但是当针对 oracle 数据库运行时,我们遇到了似乎被称为 "Int/Decimal Problem" 的问题。

用户类型(get/set)的相关部分在这里:

public object NullSafeGet(IDataReader rs, string[] names, object owner) {
var longValue = Convert.ToInt64(NHibernateUtil.Int64.NullSafeGet(rs, names[0]));
return new Identifier(longValue);
}

public void NullSafeSet(IDbCommand cmd, object value, int index) {
if (value == null || ((Identifier)value).IsNew) {
NHibernateUtil.Int64.NullSafeSet(cmd, null, index);
return;
}
NHibernateUtil.Int64.NullSafeSet(cmd, ((Identifier)value).Value, index);
}

我们当前在尝试保存包含标识符属性的任何内容时从 ISession 的 SaveOrUpdate 方法中获取无效的转换异常。

是否有一种同时适用于 Oracle 和 SQL Server 的方式来处理这个问题,或者我们是否需要创建两个不同的 UserType 实现?

最佳答案

经过更多调查,问题可能出在 sequence-identity generation strategy 上。 .它尝试使用这样的查询:

INSERT INTO my_entity (id, name) 
VALUES (hibernate_sequence.nextval, :p0)
returning id into :nhIdOutParam

使基于序列的身份的工作方式类似于它在 SQL 服务器上的工作方式(允许使用单个查询进行插入和 ID 检索)。我猜 out 参数以小数形式出现,这就是我遇到问题的地方。

切换到它正在运行的“本地”生成策略,但我仍然希望听到有关此的任何其他见解。

关于c# - IUserType 与 ODP.net 对应的 Int64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4764152/

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