这是一个非常简单的问题,但我对它感到困惑。在Visual Studio的即时窗口中,我看到了:
session.CacheMode
Ignore
session.CreateQuery("SELECT COUNT(*) FROM Protein").List()
Count = 1
[0]: 0
session.CreateSQLQuery("SELECT COUNT(*) FROM Protein").List()
Count = 1
[0]: 6
答案 0 :(得分:1)
这样的事情可能有多种原因,请检查您的映射是否有以下内容:
<class>
过滤器进行where
映射。<discriminator>
force="true"
属性。<join>
映射在一侧不匹配且未指定为optional="true"
。<loader query-ref="...">
。<filter>
启用的实体上的session.EnableFilter
。Protein
未映射到Protein
表。Protein
的表,因此NHibernate正在查询foo.Protein
,但您的sql正在查询dbo.Protein
。之后它开始变得更加深奥,例如使用自定义方言,实体tuplizer等。
查看正在发生的事情的一种简单方法是查看正在发布的SQL,您可以通过以下方式执行此操作:
<property name="show_sql" value="true"/>
并观看控制台/记录器。