.net nhibernate在两台不同的机器上为同一源生成两个不同的查询

.net nhibernate在两台不同的机器上为同一源生成两个不同的查询,.net,sql,nhibernate,criteria,.net,Sql,Nhibernate,Criteria,你好 我有相同的代码和相同的hbms在两台不同的机器上运行,每台机器都有nhibernate 3(所有东西都在源存储库中,最新版本都从那里签出),nhibernate在每台机器上生成不同的sql查询 SearchResult<Contact> searchResult = new SearchResult<Contact>(); RepositoryLink<Contact> link = new RepositoryLink<C

你好
我有相同的代码和相同的hbms在两台不同的机器上运行,每台机器都有nhibernate 3(所有东西都在源存储库中,最新版本都从那里签出),nhibernate在每台机器上生成不同的sql查询

SearchResult<Contact> searchResult = new SearchResult<Contact>();
            RepositoryLink<Contact> link = new RepositoryLink<Contact>();


                ICriteria icriteria = null;
                var clientCriteria = DetachedCriteria.For<Contact>("c")
                                        .CreateCriteria("ContactRoles","cr", NHibernate.SqlCommand.JoinType.InnerJoin)
                                        .CreateCriteria("AclRole", "ar" ,NHibernate.SqlCommand.JoinType.InnerJoin)
                                        .Add(Restrictions.Eq("ar.RoleName", RoleCode.Client));


            foreach (var keyValuePair in searchCriteria)
            {
                switch (keyValuePair.Key)
                {
                    case SearchClientCriterion.Branch:
                        clientCriteria.CreateCriteria("c.BuEntries", "be" , NHibernate.SqlCommand.JoinType.InnerJoin)
                            .CreateCriteria("be.BuLevel","bl", NHibernate.SqlCommand.JoinType.InnerJoin)
                            .Add(Restrictions.Eq("bl.LevelNo", keyValuePair.Value));
                        break;
                    case SearchClientCriterion.City:
                        clientCriteria.Add(Restrictions.Eq("c.City", keyValuePair.Value));
                        break;
                    case SearchClientCriterion.ClientID:
                        clientCriteria.Add(Restrictions.Eq("c.ID", keyValuePair.Value));
                        break;
                    case SearchClientCriterion.DOB:
                        break;
                    case SearchClientCriterion.FirstName:
                        clientCriteria.Add(Restrictions.Like("c.FirstName", keyValuePair.Value,MatchMode.Anywhere));
                        break;
                    case SearchClientCriterion.LastName:
                        clientCriteria.Add(Restrictions.Like("c.LastName", keyValuePair.Value, MatchMode.Anywhere));
                        break;
                    case SearchClientCriterion.State:
                        clientCriteria.Add(Restrictions.Eq("c.StateId", keyValuePair.Value));
                        break;
                }
            }

            if(buLevel > 0)
                clientCriteria.CreateCriteria("c.BuEntries", "be", NHibernate.SqlCommand.JoinType.InnerJoin)
                        .CreateCriteria("be.BuLevel", "bl", NHibernate.SqlCommand.JoinType.InnerJoin)
                        .Add(Restrictions.Eq("bl.LevelNo", buLevel));


            var clientCountCriteria = (ICriteria)clientCriteria.GetExecutableCriteria(link.Session).Clone();
            searchResult.Count = clientCountCriteria.SetProjection(Projections.CountDistinct("c.ID")).UniqueResult<int>();


            icriteria = clientCriteria.GetExecutableCriteria(link.Session);
            searchResult.Data = icriteria.SetFirstResult((pageIndex - 1) * pageSize).SetMaxResults(pageSize).List<Contact>();
在一台机器上

SELECT count(distinct this_.contactkey) as y0_
FROM   [Contact] this_
       left outer join [ContactRole] contactrol1_
         on this_.contactkey = contactrol1_.contactkey
       left outer join [AclRole] aclrole2_
         on contactrol1_.rolekey = aclrole2_.rolekey
WHERE  this_.username like '%alex%' /* @p0 */
       and not (aclrole2_.rolename = 'C' /* @p1 */)

有人知道这是为什么吗?

您的配置没有什么不同: 差异

            <property name="use_outer_join">true</property>
true

会话工厂中的错误可能是您的问题的原因。

您的配置没有差异: 差异

            <property name="use_outer_join">true</property>
true

在会话中,工厂可能是问题的原因。

最后,我重新创建了整个数据库。删除了所有内容。重新创建它。
再次签出所有内容,现在一切正常。

最后,我重新创建了整个数据库。删除了所有内容。重新创建它。
再次签出所有内容,现在一切正常。

两个版本是否都指向同一数据库,会话工厂配置是否都相同?两个版本是否都指向同一数据库,会话工厂配置是否两者都相同?我有一个web服务调用调用方web服务中的另一个web服务此属性确实存在,但我还是删除了它。在被调用的web服务中,此属性不存在,但它是生成上述2个查询的web服务。我不知道第一个服务中的设置会如何影响第二个服务。@Para您提到了生成查询的两台不同的机器。这两个配置之间是否存在任何不匹配?对我来说,NH 3.2中的属性use_outer_join生成错误,是否已弃用过时我让一个web服务调用调用方web服务中的另一个web服务此属性确实存在我还是删除了它。在被调用的web服务中,此属性不存在,但它是生成上述2个查询的web服务。我不知道第一个服务中的设置会如何影响第二个服务。@Para您提到了生成查询的两台不同的机器。这两个配置之间是否存在任何不匹配?对于我来说,NH3.2中的属性use\u outer\u join会生成错误,不推荐的废弃油井问题解决了吗:-)但我想知道真正的问题是什么。@Tomas我想知道toWell问题解决了:-)但我想知道真正的问题是什么。@Tomas我想知道