2017-07-26 159 views
2

我有一個類:NHibernate的錯誤

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; } 
} 

和映射的.hbm.xml文件吧:

<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> 

所以,我想從數據庫中調用存儲過程,並將其映射到類。在configuration.BuildSessionFactory();我會得到一個異常「命名查詢錯誤:{GetOrdersByDate}」。內部異常爲空。 堆棧跟蹤:

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() 

我無法弄清楚到底是怎麼回事。有誰能夠幫助我?

回答

1

同時調用命名查詢......他們仍然與我們的ORM的世界。我們需要一些(甚至基本)爲CLASS映射。添加例如這個,所有將工作:

<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> 
+0

謝謝,就是這樣。但是現在我收到錯誤「找不到屬性'alias_1'的setter',但屬性名稱與類屬性名稱相同。 – Gleb

+0

*我沒有機會測試..但我會說你很接近。嘗試減少屬性只有幾個.. - 現在我會猜測* ... OrderNumber甚至在我的例子中映射兩次..刪除冗餘 –