이 메소드가 호출된다.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가 내 데이터베이스 뷰에 접근하려는 예상 된 시도를 단순히 무시하는 이유는 무엇입니까?