문제

제안 된 주문 목록을 반환 할 방법이 있습니다. 사용자가 널을 통과하면 해당 기준이 무시됩니다.

public IList<SuggestedOrderItem> GetSuggestedOrderItemByCriteria
        (
            int? itemNumber,
            int? deptNumber            
        )
    {
        try
        {
            NHibernate.ICriteria criteria = NHibernateSession.CreateCriteria(typeof(Core.SuggestedOrderItem));

            if (itemNumber.HasValue)
                criteria.CreateCriteria("Item", "Item").Add(Expression.Eq("Item.ItemNumber", itemNumber.Value));

            if (deptNumber.HasValue)
                criteria.CreateCriteria("Item.Department", "Department").Add(Expression.Eq("Department.DepartmentNumber", deptNumber.Value));

            return criteria.List<Core.SuggestedOrderItem>();
        }
        catch (NHibernate.HibernateException he)
        {
            DataAccessException dae = new DataAccessException("NHibernate Exception", he);
            throw dae;                
        }

    }

기준을 제공하면 모든 것이 잘 작동합니다. 괜찮다는 것은 올바른 제안 된 주문을 검색하고 모두 다른 버전 번호를 가지고 있음을 의미합니다. 모든 기준이 NULL 인 경우 제안 된 모든 주문을 검색하지만 버전 번호는 모두 동일합니다. 다른 개발자가 UI를 작업 중이며 위의 방법을 호출하여 모든 주문으로 화면을 채우므로 사용자가 수정할 하나를 선택할 수 있습니다. 버전 번호가 객체의 실제 버전과 일치하지 않으므로 업데이트 요청을 받으면 거부합니다. 버전 열이 매핑 파일에서 보이는 방식입니다.

<version name="Version" type="Int64" generated="always" column="ORA_ROWSCN" access="property" unsaved-value="0"/>

도움을 주셔서 대단히 감사합니다!

업데이트:

각 경우에 생성되는 SQL 쿼리가 다른지 확인하기 위해 NHPROF를 다운로드했습니다. 기준을 전달하지 않든 기준을 제공하든 기준을 제공하더라도 WHERE 절을 제외하고는 정확히 동일합니다. DB 편집기에서 각 쿼리를 실행했을 때 서비스에서 볼 수있는 것과 동일한 결과를 얻었습니다. 이것은 이상한 오라클 문제입니까? WHERE 절을 포함하면 다른 ORA_ROWSCN 번호를 얻습니다. 그렇지 않으면 모두 동일합니다.

도움이 되었습니까?

해결책

ANSI SQL을 사용할 때 일종의 문제가 있습니다 (Oracle 10G DB를 치고 있습니다). alsi를 사용하지 않도록 nhibernate를 얻기 위해 다음 속성을 내 app.config에 추가했습니다.

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

그러나 이것은 도움이되지 않았습니다. 그런 다음 다음을 추가했습니다.

<property name="max_fetch_depth">0</property>

이제 더 많은 DB 히트가 있지만 버전 번호는 예상대로 돌아오고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top