2016-08-19 2 views
0

이 메소드가 호출된다.NHibernate가 SQL 서버를 호출하지 않음

public IList<MyStuff> GetMyStuff(Int64 MyStuffId) 
    { 
     ICriteria criteria = NHibernateSessionManager.Instance.GetSession().CreateCriteria(typeof(MyStuff)); 
     criteria.Add(Expression.Eq("x", MyStuff)); 
     return criteria.List<MyStuff>(); 
    } 

그러나 SQL Server를 프로파일 링하면 NHibernate가 서버에 액세스하려고 시도하지 않음을 알 수 있습니다.

오류가 발생하지 않습니다. criteria.List()은 단순히 0 행을 반환합니다.

MyStuff

클래스

public class MyStuff { 
    public virtual int Id { get; set; } 
    public virtual int x { get; set; } 
    ... more attributes .... 
    public override int GetHashCode() { 
     return (GetType().FullName + "|" + Id.ToString()).GetHashCode(); 
    } 
} 

되고 mystuff에는 HBM 매핑입니다 :

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false" assembly="MyStuff" namespace="My.Stuff" default-lazy="false"> 
    <class name ="MyStuff" table="dbo.viewMyStuff" dynamic-update="false" lazy="false"> 
    <cache usage="read-only"/> 
    <id name="Id" column="Id" type="int"> 
     <generator class="native" /> 
    </id> 
    <property name="x" /> 
    .... other properties 
    </class> 
</hibernate-mapping> 

다음 작품을 단지 :

select * from viewMyStuff 

NHibernate에 다른 클래스/전망을 잘하지 동일한 프로젝트에서

실제로 "XviewXMyStuffX"에 HBM 파일의 "table"을 의도적으로 입력하면 NHibernate는 오타에 아무런 문제가 없습니다. NHibernate가 내 데이터베이스 뷰에 접근하려는 예상 된 시도를 단순히 무시하는 이유는 무엇입니까?

답변

0

뷰는 속성 "x"를 문자열로 처리합니다. 하지만 nHibernate에서는 Int64로 정의합니다. 이러한 유형 차이로 인해 기준이 실패하게됩니다. 그러나 어떤 오류도보고하지 않고?

0

쿼리가 의도 한 정확한 클래스를 사용하려고 시도하고 매핑이 정확히 동일한 클래스에 적용되는지 다시 확인하십시오. 다른 네임 스페이스 또는 어셈블리에서 동일한 이름을 가진 클래스를주의하십시오. 이 타입의 문제의 한가지 원인은 NHibernate에 실제로 맵핑되지 않은 클래스를 쿼리하려고 할 때입니다. 그리고 NHibernate는 에러가 아닌 EN 빈 결과를 리턴 할 것입니다.

아, 캐시 요소를 사용하지 않으려 고 시도 했습니까?

관련 문제