运行时错误 - 命名查询未知 - Nibernate,Oracle,C#

时间:2012-05-24 18:28:59

标签: oracle stored-procedures fluent-nhibernate nhibernate-mapping runtime-error

我在Stackoverflow和其他地方看过很多示例和问题/答案。我不明白为什么我的C#没有看到Oracle SP。任何帮助将不胜感激。

基本目标 -

我有一个Oracle SP(如下所示),它在返回参数#1中返回一个游标,并在#2和#3中给出两个字符串参数。

我从C#调用SP,尝试将返回的Resultset放入Class ExtractCoastalSurvey1SP的C#List中。 (如下所示)

我的代码在Nhibernate命令GetNamedQuery上爆炸。

Oracle SP,NHibernate映射XML文件,NHibernate映射代码,调用代码和运行时错误转储如下。

如果您需要更多信息,请告诉我 - gmail.com中的sblalock。

感谢您的帮助。解决这个问题,并在我眼中升到神的地位!干杯,祝福有个美好的一天!

微米。斯科特布拉洛克

运行时错误

Named query not known: PROC_MASSANDABUNDANCE Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: NHibernate.MappingException: Named query not known: PROC_MASSANDABUNDANCE

Source Error:

Line 7257:////query.SetParameter("SPECIESCODE_IN", "6186020202");
Line 7258: Line 7259: IQuery query = Session.GetNamedQuery("PROC_MASSANDABUNDANCE"); Line 7260: query.SetParameter("PROJECTCODE_IN", "P94"); Line 7261: query.SetParameter("SPECIESCODE_IN", "6186020202");

Source File: C:\Visual Studio 2008\Projects\SEAMAP\SEAMAP\SEAMAP\Service\DBRepository.cs Line: 7259

Stack Trace:

[MappingException: Named query not known: PROC_MASSANDABUNDANCE] NHibernate.Impl.AbstractSessionImpl.GetNamedQuery(String queryName) +509 SEAMAP.Services.DBRepository.ExtractCoastalSurvey1Collection(String[] _AreaArray, String _LatitudeRangeBegin, String _LatitudeRangeEnd, String _YearRangeBegin, String _YearRangeEnd, String _Season, String _State, String _DepthZone, String[] _SelectedMonthArray, String[] _SelectedYearArray, String[] _SelectedScientificNamesArray, String[] _SelectedCommonNamesArray, String[] _SelectedACCSPGridArray) in C:\Visual Studio 2008\Projects\SEAMAP\SEAMAP\SEAMAP\Service\DBRepository.cs:7259 SEAMAP.Controllers.ReportsController.ExtractCoastalSurvey(ExtractCoastalSurveyParameters _model) in C:\Visual Studio 2008\Projects\SEAMAP\SEAMAP\SEAMAP\Controllers\ReportsController.cs:277 lambda_method(ExecutionScope , ControllerBase , Object[] ) +140 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 parameters) +178 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters) +24 System.Web.Mvc.<>c_DisplayClassd.b_a() +52 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func1 continuation) +254 System.Web.Mvc.<>c__DisplayClassf.<InvokeActionMethodWithFilters>b__c() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList1 filters, ActionDescriptor actionDescriptor, IDictionary2 parameters) +192 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +314 System.Web.Mvc.Controller.ExecuteCore() +105 System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +39 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7 System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +34 System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21 System.Web.Mvc.Async.<>c__DisplayClass81.b__7(IAsyncResult _) +12 System.Web.Mvc.Async.WrappedAsyncResult`1.End() +59 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +44 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +7 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8699438 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

来自ORACLE

PROCEDURE PROC_MASSANDABUNDANCE 
(p_recordset OUT SYS_REFCURSOR,PROJECTCODE_IN IN VARCHAR2, SPECIESCODE_IN IN VARCHAR2) AS 

BEGIN

OPEN p_recordset FOR

SELECT * FROM TABLE;

END PROC_MASSANDABUNDANCE;

Mappings.HMB.XML文件

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="SEAMAP" assembly="SEAMAP" >


  <sql-query name="PROC_MASSANDABUNDANCE" Callable="true">
     <query-param name="PROJECTCODE_IN" type="string" />
     <query-param name="SPECIESCODE_IN" type="string" />

    <return class="SEAMAP.Models.ExtractCoastalSurvey1SP" />

    { call PROC_MASSANDABUNDANCE(:PROJECTCODE_IN :SPECIESCODE_IN) } 

  </sql-query>

</hibernate-mapping>

C#代码

映射代码

    private static ISessionFactory CreateSessionFactory()
    {
        return Fluently.Configure()
               .Database(OracleClientConfiguration.Oracle10
               .ConnectionString(c => c.FromConnectionStringWithKey(connString))
               .ShowSql())
               .ExposeConfiguration(c => c.SetProperty("current_session_context_class", "web"))
               .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Project>())
               .Mappings(m => m.HbmMappings.AddFromAssemblyOf<Project>())
               .BuildSessionFactory();
    }

致电代码

                    IQuery query = Session.GetNamedQuery("PROC_MASSANDABUNDANCE");
                    query.SetParameter("PROJECTCODE_IN", "P94");
                    query.SetParameter("SPECIESCODE_IN", "6186020202");

                    return query.List<ExtractCoastalSurvey1SP>();

1 个答案:

答案 0 :(得分:0)

将模式名称附加到过程时会发生什么?如[schema]。[procedure]。

对于我在C#应用程序中的打包代码,我总是把光标放在最后但是对于fluent-nhibernate来说这可能不是必需的