c# – 如何在运行时访问(或生成)NHibernate Sql
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何在运行时访问(或生成)NHibernate Sql,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1402字,纯文字阅读大概需要3分钟。
内容图文
![c# – 如何在运行时访问(或生成)NHibernate Sql](/upload/InfoBanner/zyjiaocheng/902/c0cf45f77d9a478399713e2ffabcc62b.jpg)
我认为标题是相当自我解释的,但是给出一点背景.
我一直在阅读这个问题,但它并不完全符合我的用例
Intercept-sql-statements-containing-parameter-values-generated-by-nhibernate
我遇到的问题是我只想在发生异常(或时间段过去)时注销生成的SQL.这是为了使我们能够在非常复杂的应用程序中对一些长时间运行的查询进行故障排除.我不想拦截并记录所有查询,因为我相信会有性能影响.
在我想要记录它的时候,我有NHibernate使用的ICriteria对象,所以我正在寻找的是一种“虚拟”NHibernate对象,我可以触发这些ICriteria并获取SQL字符串(或者甚至带有占位符的SQL参数和参数列表).
所以存在这样做的事情(我认为它要么非常简单而且我错过了一些东西,或者它很难,没有其他人需要它).
如果它不存在,那么创建实现目标的东西的最佳方法是什么,而无需手动构建SQL(我希望尽可能接近执行的SQL).有没有办法直接进入NHibernate生成器并获取字符串?
添加到此以使其更清晰.
我想这样做“事后”,而不是拦截每个查询(由于性能问题).我也不想使用Log4Net这样做,因为我需要它来记录会话.
我认为必须有一种方法来创建第二个NHibernate对象,可能使用不同的驱动程序(一个不会进入数据库),这样我就可以实现拦截该对象的方法,而不是主对象这是持久的数据库
解决方法:
如果您需要知道在有异常的情况下执行的查询,您可以使用检查异常的“数据”其他元素:
yourexception.Data["actual-sql-query"]
包含导致异常的查询.
在序数操作中,您可以使用名为“NHibernate.SQL”的记录器,这是获取查询文本的最可靠方式,因为其他“直接”方法取决于您查询NH的方式(ICriteria,Hql,QueryOver) ,LinqTONh,SOmeNewWayNotYetImplemented …)所以拦截记录器通常更好.
内容总结
以上是互联网集市为您收集整理的c# – 如何在运行时访问(或生成)NHibernate Sql全部内容,希望文章能够帮你解决c# – 如何在运行时访问(或生成)NHibernate Sql所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。