Gleb
Gleb

Reputation: 1432

NHibernate Errors in named query

I have a class:

public class OrderDetails
{
    public virtual int OrderNumber { get; set; }
    public virtual DateTime OrderDate { get; set; }
    public virtual int ProductCode { get; set; }
    public virtual string ProductName { get; set; }
    public virtual int Quantity { get; set; }
    public virtual decimal Price { get; set; }
}

And mapping .hbm.xml file for it:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true" assembly="AsmName" namespace="AsmName.Models">
  <sql-query name="GetOrdersByDate" callable="true">
    <return class="AsmName.Models.OrderDetails">
      <return-property name="OrderNumber" column="ID"/>
      <return-property name="OrderDate" column="OrderDate"/>
      <return-property name="ProductCode" column="productCode"/>
      <return-property name="ProductName" column="Name"/>
      <return-property name="Quantity" column="Quantity"/>
      <return-property name="Price" column="UnitPrice"/>
    </return>
    exec [dbo].[sp_OrdersByDate] :dateFrom, :dateTo
  </sql-query>
</hibernate-mapping>

So, I'm trying to call stored procedure from db and map it to class. On configuration.BuildSessionFactory(); I'v get an exception "Errors in named query:{GetOrdersByDate}". Inner exception is null. Stack trace is:

 NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners)
   в NHibernate.Cfg.Configuration.BuildSessionFactory()
   в Fuse8Test.Models.DAL.NHibirnateSession.OpenSession() в c:\users\itenberg\documents\visual studio 2017\Projects\Fuse8Test\Fuse8Test\Models\DAL\NHibirnateSession.cs:строка 19
   в Fuse8Test.Models.DAL.DBContext.GetReport(DateTime dateFrom, DateTime dateTo) в c:\users\itenberg\documents\visual studio 2017\Projects\Fuse8Test\Fuse8Test\Models\DAL\DBContext.cs:строка 15
   в Fuse8Test.Controllers.HomeController.Index() в c:\users\itenberg\documents\visual studio 2017\Projects\Fuse8Test\Fuse8Test\Controllers\HomeController.cs:строка 17
   в lambda_method(Closure , ControllerBase , Object[] )
   в System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
   в System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   в System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   в System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
   в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
   в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
   в System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
   в System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d()
   в System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()

I can't figure out what is going on. Can anybody help me?

Upvotes: 2

Views: 1022

Answers (1)

Radim K&#246;hler
Radim K&#246;hler

Reputation: 123861

While called named queries... they still relate to our ORM world. We'd need some (even basic) mapping for a CLASS. Add for example this, and all will work:

<class name="AsmName.Models.OrderDetails" >
    <id name="OrderNumber" />
    <property name="OrderNumber" />
    <property name="OrderDate" />
    <property name="ProductCode" />
    <property name="ProductName" />
    <property name="Quantity" />
    <property name="Price" />
</class>

Upvotes: 2

Related Questions