2017-07-26 1 views
1

Je suis en train de la carte classe appelée une procédure stockée avec NHibernateNHibernate propriétés de la classe carte pour interroger

J'ai une classe:

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

et la cartographie de cette classe:

<class name="OrderDetails" > 
    <id name="OrderNumber" column="ID"/> 
    <property name="OrderNumber" column="ID"/> 
    <property name="OrderDate" column="OrderDate"/> 
    <property name="ProductCode" column="productCode"/> 
    <property name="ProductName" column="Name"/> 
    <property name="Quantity" column="Quantity"/> 
    <property name="Price" column="UnitPrice"/> 
    <loader query-ref="GetOrdersByDate" /> 
    </class> 
    <sql-query name="GetOrdersByDate" callable="true"> 
    exec [dbo].[sp_OrdersByDate] :DateFrom, :DateTo 
    </sql-query> 

Lorsque j'appelle cette requête, j'obtiens une exception

Impossible de trouver un setter pour la propriété 'ID' dans la classe 'OrderDetails'

Comment puis-je mapper ces colonnes aux propriétés de classe?

+0

@ RadimKöhler Je comprends, mais ce n'est pas un problème dans ce cas. – Gleb

Répondre

1

Avertissement: Prêt à supprimer cette ... si encore aucune aide ...

Ceci est mon SP (MS SQL)

CREATE PROCEDURE [dbo].[sp_OrdersByDate] 
    @DateFrom DateTime, 
    @DateTo DateTime 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT 1 as ID 
    , '2011-01-01' AS OrderDate 
    , 123   AS productCode 
    , 'XYZ'  AS Name 
    , 1   AS Quantity 
    , 100   AS UnitPrice 
END 
GO 

Ceci est la cartographie (testé)

<class name="OrderDetails" > 
    <id name="OrderNumber"  column="ID" /> 
    <property name="OrderDate" column="OrderDate"/> 
    <property name="ProductCode" column="productCode"/> 
    <property name="ProductName" column="Name"/> 
    <property name="Quantity" column="Quantity"/> 
    <property name="Price"  column="UnitPrice"/> 
    <loader query-ref="GetOrdersByDate" /> 
</class> 

<sql-query name="GetOrdersByDate" callable="true"> 
    <return class="OrderDetails"></return> 
    exec [dbo].[sp_OrdersByDate] :DateFrom, :DateTo 
</sql-query> 

Et ceci est la requête (travail)

var query = session.GetNamedQuery("GetOrdersByDate"); 

query.SetParameter("DateFrom", new DateTime(2013, 10, 26)); 
query.SetParameter("DateTo", new DateTime(2020, 12, 26)); 

var list = query.List<OrderDetails>(); 
+1

Merci beaucoup mach. Je comprends le problème. J'utilisais SetResultTransformer (Transformers.AliasToBean ()) pour la requête, donc pour NHibernate, il semble que OrderDetails devrait avoir une propriété de type OrderDetails. – Gleb