NHibernate show-sql - 为什么SQL显示无效?

Dav*_*vid 2 sql nhibernate

我喜欢NHibernate中显示生成的SQL的功能.但是当我将它粘贴到SQL Server Management Studio中时,我意识到它实际上并不合适!

这是一个例子:

SELECT person0_.PersonId as PersonId1_0_, person0_.Title as Title1_0_, person0_.FirstName as FirstName1_0_, person0_.MiddleNames as MiddleNa4_1_0_, person0_.LastName as LastName1_0_ FROM Kctc.People person0_ WHERE person0_.PersonId=@p0;@p0 = 1
Run Code Online (Sandbox Code Playgroud)

由于指定参数p0的方式,这无效.它需要:

DECLARE @p0 int
SET @p0 = 1
Run Code Online (Sandbox Code Playgroud)

在SELECT命令之前.

我想我的问题是:为什么NHibernate没有显示它发送到数据库的ACTUAL SQL?为什么会这样显示呢?

有什么我想念的吗?

谢谢

大卫

Jam*_*Ide 6

发送到SQL Server的命令是sp_executesql系统存储过程的字符串参数.参数列表作为参数,值对参数列表发送.您可以使用SQL事件探查器轻松查看此信息.NHibernate Profiler将查询重新格式化为可以剪切并粘贴到SSMS中的查询.

以下是发送到SQL Server的实际NHibernate对象加载的示例:

exec sp_executesql N'SELECT track0_.TrackId as TrackId84_0_, track0_.CreatedBy as CreatedBy84_0_, track0_.CreatedDt as CreatedDt84_0_, track0_.RevisedBy as RevisedBy84_0_, track0_.RevisedDt as RevisedDt84_0_, track0_.Name as Name84_0_, track0_.Description as Descript7_84_0_ FROM Nucleus.Track track0_ WHERE track0_.Name=@p0',N'@p0 nvarchar(8)',@p0=N'6036HPGP'
Run Code Online (Sandbox Code Playgroud)

由于查询作为字符串发送到sp_executesql,因此您可能会获得与直接执行查询所生成的执行计划不同的执行计划.在某些情况下,这可能会带来巨大的性能损失.