1

誰かが私を腹立たしい問題で助けてくれるのだろうか.

nHibernate から呼び出す SQL Server 2008 データベースにストアド プロシージャがあります。データ アクセス リポジトリをテストするさまざまな単体テストがあり、これらをローカルの Visual Studio マシンから実行すると合格します。ただし、同じデータベースに対して TFS 2010 で自動ビルドの一部として実行すると、リポジトリ コードは次のエラーで失敗します。

不明な名前付きクエリ: 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 プロファイラーを実行し、ストアド プロシージャが呼び出されていないことを確認しました。

私たちはアイデアを完全に使い果たしたので、どんな助けも大歓迎です.

どうもありがとう!

4

1 に答える 1

0

何らかの理由で、hbm ファイルを使用して dll を追加する AddAssembly メソッドが、tfs マシンで実行されているときに呼び出されないと思います。unittest の実行時に読み込まれる構成ファイルを確認し、構成なしで dll を追加するセッション ファクトリを作成して、それが問題であるかどうかを確認してください。

于 2012-11-14T11:08:21.873 に答える