NHibernate Id生成问题

cheng_feng001 2011-09-07 11:25:49
Spring.NET 1.3.2 + NHibernate 3.1.0,主键为GUID,配置设为assigned。程序上,在Save前为对象指定了Id值。
数据库为SQL Server 2008时,一切运行正常;换成Oracle 9i时,Save时报“Unexpected row count:0;expected 1”,数据成功存入了数据库,但是Id值不是我指定的GUID,而是NHibernate自己生成了一个UUID(没有中间的四根短横线)。数据库Id字段为VARCHAR(36)类型。
在网上搜了一天了,似乎就没有人遇到过这个问题。是NHibernate 3.1.0的Bug?抑或是我哪里搞错了?
...全文
254 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cheng_feng001 2011-09-08
  • 打赏
  • 举报
回复
关于Id被NHibernate更改的问题,仔细分析后发现,NHibernate不是自己生成了一个Id,而是将我指定的Guid做了转换,似乎是高低位转换,并去掉了中间的短横线。经测试,加载的时候,用我指定的Guid也同样可以将对应的记录查询出来,说明NHibernate在持久化和查询的时候都做了处理,这样对应用程序来说倒也是透明的,不会出错。但是不清楚NHibernate为何要做这种转换?

关于报“Unexpected row count:0;expected 1”的问题,估计是因为我新增、更新都用的存储过程,没有返回值,所以NHibernate认为受影响的行数为0吧。解决办法是不用存储过程,将存储过程的业务逻辑放在了应用程序中实现,这样也可以使用NHibernate的自动建表了,挺好的。
LMAOhuaNL 2011-09-07
  • 打赏
  • 举报
回复
表示关注
_三皮_ 2011-09-07
  • 打赏
  • 举报
回复
这个框架没用过,估计用的人不多吧,你用英文关键字搜一下,看看国外的同行有没有解决方法

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧