2016-08-19 58 views
0

這個方法被調用。NHibernate沒有調用SQL Server

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的不只是與其他類/人次罰款在同一個項目中。

事實上,如果我故意將HBM文件中的「表格」拼寫錯誤爲「XviewXMyStuffX」,那麼NHibernate對排字錯誤沒有任何問題。爲什麼NHibernate完全忽略了訪問我的數據庫視圖的預期嘗試?

回答

0

我發現視圖將屬性「x」視爲字符串。但在nHibernate中,我將其定義爲Int64。這些類型差異很大程度上導致標準失敗。但沒有任何報告的錯誤?

0

仔細檢查您的查詢是否確實嘗試使用您指定的確切類,並且該映射也適用於完全相同的類。例如,請注意在不同名稱空間或程序集中具有相同名稱的類。這種類型的問題的一個原因是,如果您嘗試查詢實際上未在NHibernate中映射的類 - 那麼NHibernate將返回en空結果,而不是錯誤。

哦,你試過沒有緩存元素來排除?