Frage

Hallo, ich versuche, ein gespeichertes Verfahren in NhisperNate zu verwenden, und ich habe einige Methoden gefunden:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <sql-query name="CO_Visites_Treeview_Sel">
    exec CO_Visites_Treeview_Sel :Idclient, :Idmagasin, :Autre, :Tous
  </sql-query>
</hibernate-mapping>

Wenn ich die Daten verwenden möchte, die ich verwenden werde:

var query = session.GetNamedQuery("CO_Visites_Treeview_Sel");
query.SetString("Idclient", lstClients.SelectedValue.ToString());
query.SetInt32("Idmagasin", 36);
query.SetBoolean("Autre", false);
query.SetBoolean("Tous", true);
var results = query.List();

In diesem Fall werde ich nicht intelligent sein, weder Ergebnis ["Colname"

Ich verwende eine andere Methode:

    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
      <class name="NHibernate.DataAccess.Models.Visites_Treeview,NHibernate.DataAccess" lazy="true">
        <id name="Idvisite" column="IDVISITE" type="string">
          <generator class="assigned" />
        </id>
        <property column="NOMMAGASIN" name="Nommagasin" type="string" />
        <property column="DATEVIS" name="Datevis" type="DateTime" />
        <property column="INTERVENTION" name="Intervention" type="Boolean" />
        <property column="IDFACTURE" name="Idfacture" type="string" />
        <property column="STATUT" name="Statut" type="byte" />
        <property column="NOFACTURE" name="Nofacture" type="int" />
        <property column="NODEVIS" name="Nodevis" type="int" />
        <property column="LIVRE" name="Livre" type="Boolean" />
        <property column="NOCOMMANDE" name="Nocommande" type="int" />
        <property column="COMPTABILISEE" name="Comptabilisee" type="Boolean" />
        <property column="RECUP" name="Recup" type="Boolean" />
        <property column="MASQUE" name="Masque" type="Boolean" />
      </class>
      <sql-query name="CO_Visites_Treeview_Sel">
        <return alias="Visites_Treeview" class="NHibernate.DataAccess.Models.Visites_Treeview,NHibernate.DataAccess">
          <return-property column="NOMMAGASIN" name="Nommagasin" />
          <return-property column="IDVISITE" name="Idvisite" />
          <return-property column="DATEVIS" name="Datevis" />
          <return-property column="INTERVENTION" name="Intervention" />
          <return-property column="IDFACTURE" name="Idfacture" />
          <return-property column="STATUT" name="Statut" />
          <return-property column="NOFACTURE" name="Nofacture" />
          <return-property column="NODEVIS" name="Nodevis" />
          <return-property column="LIVRE" name="Livre" />
          <return-property column="NOCOMMANDE" name="Nocommande" />
          <return-property column="COMPTABILISEE" name="Comptabilisee" />
          <return-property column="RECUP" name="Recup" />
          <return-property column="MASQUE" name="Masque" />
        </return>
        exec CO_Visites_Treeview_Sel :Idclient, :Idmagasin, :Autre, :Tous
      </sql-query>
    </hibernate-mapping>

Ich habe eine Bohnenklasse erstellt. In diesem Fall haben die Ergebnisse ein stark typisiertes Objekt, aber ich habe ein Kohärenzproblem. Aber ich habe keine wirkliche Kennung. Wenn es also zwei Idvite gibt, wird die zweite ignoriert. Ich habe versucht, einen zusammengesetzten Schlüssel zu erstellen, aber er funktioniert nicht.

<composite-id>
  <key-property name="Idvisite" column="IDVISITE" type="string" />
  <key-property name="Idfacture" column="IDFACTURE" type="string" />
</composite-id>

Und ich habe einen Fehler:

could not execute query
[ exec CO_Visites_Treeview_Sel @p0, @p1, @p2, @p3 ]
  Name:Idclient - Value:036000004130  Name:Idmagasin - Value:36  Name:Autre - Value:False  Name:Tous - Value:True
[SQL: exec CO_Visites_Treeview_Sel @p0, @p1, @p2, @p3]

Kann mir jemand sagen, wie es geht?

Grüße

War es hilfreich?

Lösung

Versuchen Sie dies, Ihre Zuordnung:-

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <sql-query name="CO_Visites_Treeview_Sel">
    exec CO_Visites_Treeview_Sel :Idclient, :Idmagasin, :Autre, :Tous
  </sql-query>
</hibernate-mapping>

Verwenden Sie setResulttransformer ...

var results = Session
    .GetNamedQuery("CO_Visites_Treeview_Sel")
    .SetString("Idclient", lstClients.SelectedValue.ToString())
    .SetInt32("Idmagasin", 36)
    .SetBoolean("Autre", false)
    .SetBoolean("Tous", true)
    .SetResultTransformer(new AliasToBeanResultTransformer(typeof(YOURCLASS)));

return results.List<YOURCLASS>();

Und Ihre Klasse ist:-

public class YOURCLASS 
{
    public virtual int ColA { get; set; }
    public virtual string COLB { get; set; }
    public virtual int COLC { get; set; }
    // etc..
}

HTH

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top