Nhibernateでストアドプロシージャを使用する方法
-
23-10-2019 - |
質問
こんにちは私はnhibernateでストアドプロシージャを使用しようとします、そして、私はいくつかの方法を見つけました:
<?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>
データを使用したい場合は、使用します。
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();
その場合、私は知的にはありません['colname'
別の方法を使用します。
<?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>
Beanクラスを作成しました。その場合、結果にはオブジェクトが強く入力されますが、一貫性の問題があります。しかし、私には実際の識別子がないので、2つのidvisiteがある場合、2つ目は無視されます。複合キーを作成しようとしましたが、機能しません。
<composite-id>
<key-property name="Idvisite" column="IDVISITE" type="string" />
<key-property name="Idfacture" column="IDFACTURE" type="string" />
</composite-id>
そして、私はエラーがあります:
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]
誰かが私に方法を教えてもらえますか?
よろしく
解決
これを試してください、あなたのマッピング: -
<?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>
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>();
そしてあなたのクラスは次のとおりです: -
public class YOURCLASS
{
public virtual int ColA { get; set; }
public virtual string COLB { get; set; }
public virtual int COLC { get; set; }
// etc..
}
Hth
所属していません StackOverflow