0

保存されたプロシージャでnhibernateのCreateSQLQueryを介してデータベースからデータを取得しようとしています。次のコードのようなもの。

次に、基本的にセッショントランザクションのコミットを実行していますが、コミットによって「更新できません」という例外がスローされます。CustomEntityDaoで更新ステートメントを実行しようとしています。

        const string selectSQL = "EXEC GetDataSP @Id = :Id";
        var query = Session.CreateSQLQuery(selectSQL);
        query.SetString("Id", "10");
        query.AddEntity(typeof (CustomEntityDao));

        var entityList = query.List<CustomEntityDao>();

        try
        {
            Session.Transaction.Commit();
        }
        catch (Exception ex)
        {
            throw ex;
        }

私の質問は、コードでクエリを実行しているだけでわかるように、エンティティが変更されたものとして扱われる理由です。

4

1 に答える 1

2

コードに何か他のことが起こっている可能性があります。私が提案できるのは、NHibernate Profilerを使用して試用版をwww.nhprof.comからダウンロードし、実行されているSQLコマンドを監視して、取得されているオブジェクトを確認することです。

また、そもそもなぜトランザクションをコミットしているのかわかりません。

この特定の問題を解決するには、StatelessSessionエンティティを追跡しないNHibernatesを常に使用するSession.Evictか、Nhibernateを使用して特定のオブジェクトの追跡を停止するように依頼することもできます。

于 2012-04-13T05:59:30.477 に答える