3

ストアド プロシージャを NHibernate で動作させるのに苦労しています。SP から返されたデータは、どのデータベース テーブルにも対応していません。

これは私のマッピングファイルです:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DomainModel" namespace="DomainModel.Entities">

    <sql-query name="DoSomething">
        <return class="SomeClass">
            <return-property name="ID" column="ID"/>
        </return>
        exec [dbo].[sp_doSomething]
    </sql-query>

</hibernate-mapping>

ここに私のドメインクラスがあります:

namespace DomainModel.Entities
{
    public class SomeClass
    {
        public SomeClass()
        {
        }
        public virtual Guid ID
        {
            get;
            set;
        }
    }
}

コードを実行すると、失敗します

Exception Details: NHibernate.HibernateException: Errors in named queries: {DoSomething}

80行目

Line 78:             config.Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "NHibernate.config"));            
Line 79: 
Line 80:             g_sessionFactory = config.BuildSessionFactory();       

NHibernate コードをデバッグすると、hbm.xml でクラス マッピング (sql-query のみ) が定義されていないため、SomeClass が永続化ディクショナリに追加されていないようです。その後の CheckNamedQueries 関数では、SomeClass の永続化子を見つけることができません。

明白なことはすべて確認しました (hbm を埋め込みリソースとして作成するなど)。私のコードは、Web で見つけた他のサンプルとそれほど違いはありませんが、どういうわけか動作させることができません。この問題を解決する方法はありますか?

4

2 に答える 2

7

さて、SomeClassのクラスマッピングはどこにありますか?

あなたはまだそれをマッピングする必要があります。http://nhibernate.info/doc/nh/en/index.html#querysql-loadをお読みください。

于 2010-04-07T11:00:17.553 に答える
0

subselectブロックでのクラス マッピングの使用を見てください。これはJavaのドキュメントで見つけましたが、.Netでも機能する可能性があります。

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html (セクション 5.1.3 までスクロールダウン)

于 2010-04-07T15:41:56.817 に答える