我想知道是否有人可以帮我解决一个令人愤怒的问题。
我们在SQL Server 2008数据库中有一个存储过程,我们从nHibernate调用它。我们有各种单元测试来测试我们的数据访问存储库,当它们从我们传递的本地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事件探查器,并确认在此期间未调用存储过程。
我们非常感谢任何帮助,因为我们完全没有想法。
非常感谢!
答案 0 :(得分:0)
我想由于某种原因,在tfs机器上运行时,不会调用添加dll和hbm文件的AddAssembly方法。检查运行unittest时加载了哪些配置文件,并尝试在没有配置的情况下添加dll的会话工厂,以查看是否存在问题。