NHibernate GenericADOException

时间:2011-07-11 15:15:51

标签: c# c#-4.0

sesion.Get(ID);有时产生GenericADOException:

无法加载实体:[PFC __ Servidor.Entidades.Usuario#10] [SQL:SELECT usuario0 .us_id as us1_1_0_,usuario0_.us_email as us2_1_0_,usuario0_.us_contrasena as us3_1_0_ FROM public。 usuario usuario0_ WHERE usuario0_.us_id =?]

任何已知问题在哪里?为什么不总是失败?

PD:抱歉我的英文。

ACT1:内部异常: [System.NullReferenceException]“对象引用未设置为对象的实例”

3 个答案:

答案 0 :(得分:0)

你能发布innerException吗?

  • 你确定你的连接字符串是否良好?
  • 您确定您的数据库已创建吗?
  • 您确定您的映射文件指向正确的表名吗?
  • 您确定您的数据库实例正在运行吗?

<强>更新

我也发现了这个:

Could not load an entity when table is existing

答案 1 :(得分:0)

  

有时候

您的会话是否在线程之间共享?如果是这样,死亡。会话不是线程安全的。

答案 2 :(得分:0)

当我开始实现当前框架时,我遇到了这个问题。事实上,正如Jason所建议的那样 - 您需要将NHibernate会话范围设置为按请求。这意味着将为每个请求打开一个新会话,并在请求结束时关闭。但是,每个应用程序启动时只创建一次会话工厂,因为这是最昂贵的部分。

您是否正在使用任何依赖注入?您可以找到有关如何在Windsor Castle NHibernate facility上实现每请求会话范围的很好示例。

如果您是手动执行此操作,则可以在Global.asax Request_begin中打开NHibernate会话,并确保它已关闭并以Request_End方法处理。

使用NHIbernate的一种巧妙方法是:

  • Castle Windsor(依赖注入)
  • 存储库模式(将数据访问分开)
  • 工作单位模式。您可以将正确的存储库和工作单元注入服务
  • ,而不是注入nhibernate会话
  • 服务层(业务逻辑) - 您从控制器或应用程序表示层调用的内容