NHibernate GenericADOException
本文关键字:GenericADOException NHibernate | 更新日期: 2023-09-27 18:01:41
sesion。Get(id(;有时会生成GenericADOException:
无法加载实体:[PFC_Servidor.Entidades.Usumario#10][SQL:SELECT usuario0.us_id为us1_1_0_,usuario0.us_email为us2_1_0_、usuario0-us_contrasena为us3_1_0_ FROM public.Usuario Usuario_ WHERE Usuario_.us_id=?]
知道问题出在哪里吗?为什么不总是失败?
PD:对不起我的英语。
ACT1:内部异常:[System.NullReferenceException]"对象引用未设置为对象的实例">
有时
您的会话是否在线程之间共享?如果是,那就是死亡。会话不是线程安全的。
你能发布innerException吗?
- 你确定你的连接字符串格式正确吗
- 你确定你的数据库已经创建了吗
- 您确定映射文件指向正确的表名吗
- 你确定你的数据库实例正在运行吗
更新
我还发现了这个:
当表是现有时无法加载实体
我在开始实现当前框架时遇到了这个问题。事实上,正如Jason所建议的那样——您需要将NHibernate会话范围设置为每个请求。这意味着将为每个请求打开一个新会话,并在请求结束时关闭。但是,每次应用程序启动只创建一次会话工厂,因为这是最昂贵的部分。
您是否使用任何依赖项注入?您可以在Windsor Castle NHibernate设施上找到如何实现按请求会话范围界定的好例子。
但是,如果您是手动执行,则可以在Global.asax Request_begin中打开NHibernate会话,并确保它已关闭并在Request_End方法中处理。
使用NHIbernate的一种巧妙方法是:
- Castle Windsor(依赖性注入(
- 存储库模式(分离数据访问(
- 工作模式单元。不是注入nhibernate会话,而是将正确的存储库和工作单元注入到服务中
- 服务层(业务逻辑(-您从控制器或应用程序表示层调用的内容