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 Profiler,并确认在此期间没有调用存储过程。

任何帮助将不胜感激,因为我们已经完全没有想法了。

非常感谢!

4

1 回答 1

0

我猜出于某种原因,在 tfs 机器上运行时不会调用 AddAssembly 方法来添加带有 hbm 文件的 dll。检查运行单元测试时加载了哪些配置文件,并可能尝试创建一个会话工厂,在其中添加没有配置的 dll 以查看是否是问题所在。

于 2012-11-14T11:08:21.873 回答