2012-11-14 36 views
1

我想知道是否有人可以幫助我的真氣問題。nHibernate'未命名的查詢未找到'錯誤從單元測試版本

我們在從nHibernate調用的SQL Server 2008數據庫中有一個存儲過程。我們有各種單元測試來測試我們的數據訪問存儲庫,當它們從我們本地的Visual Studio機器上運行時,它們會通過。但是,由於我們的自動構建的一部分於2010年TFS針對同一數據庫執行時,庫代碼失敗:

不知道

命名查詢:GetMyData

映射XML樣子(我已經簡化和去除公司具體的東西):

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true" assembly="MyCompany.SystemDomain" namespace="MyCompany.SystemDomain"> 
<class name="MyClass"> 
    <id name="Guid" type="guid"/> 
    <property name="QuoteReference"/> 
</class> 
<sql-query name="GetMyData"> 
    <return alias="GetMyData" class="MyClass"> 
     <return-property column="Guid" name="Guid"/> 
     <return-property column="QuoteReference" name="QuoteReference"/> 
    </return>  
    exec MyStoredProc :param1, :param2 
</sql-query> 

主叫C#代碼如下所示:

IQuery query = session.GetNamedQuery("GetMyData"); 
query.SetString("QuoteReference", quoteReference); 
query.SetInt32("FSANumber", 12345); 

IList<MyClass> result = query.List<MyClass>(); 

我已檢查.hbm.xml文件是嵌入式資源,並且已打開包含上述代碼的存儲庫程序集,其中包含Reflector(取自我們的Binaries文件夾中的構建服務器),並可以查看包含映射,我可以看到使用session.GetNamedQuery()調用調用的命名查詢匹配該程序集中的sql-query映射元素中的name屬性。

當自動構建單元測試執行時,我也在我們的數據庫上運行SQL事件探查器,並確認存儲過程沒有在調用過程中。

任何幫助將不勝感激,因爲我們已經完全沒有想法。

非常感謝!

回答

0

我想出於某種原因,在tfs計算機上運行時,不會調用AddAssembly方法來爲您的dll添加hbm文件。檢查運行unittest時加載了哪些配置文件,並且可能會嘗試在沒有配置的情況下添加dll來創建會話工廠,以查看是否存在問題。

+0

好點。如果具有相同名稱的程序集已在GAC中註冊,則可能找不到本地(=更新)的副本(至少適用於IIS Web應用程序)。使用任務管理器的資源監視器或進程資源管理器來查找正在加載的程序集。 – devio