最近、少し前に書いたSOAPWebサービスでパフォーマンスの問題が発生しました。たくさんのクエリが実行されていて、hbm.xmlマッピングがlazy=falseステートメントでいっぱいになっていることに気づきました。NHibernate 3.0にアップグレードし、lazy = falseのものを削除しましたが、すべてがはるかに高速でした....しかし、次のエラーが発生します。
System.InvalidOperationException:XMLドキュメントの生成中にエラーが発生しました。---> System.InvalidOperationException:タイプUserProxyが予期されていませんでした。XmlIncludeまたはSoapInclude属性を使用して、静的に認識されていないタイプを指定します。
Userは、次のようにクラスタグからlazy=falseプロパティを削除したクラスです。
<class name="User" table="Users" >
<id name="DatabaseID" unsaved-value="0" column="ID" type="integer" >
<generator class="native"/>
</id>
<property name="IsExpert"/>
.....more stuff here....
</class>
私のWebサービスには次のような方法があります(少し簡略化されています。実際には、サービスとnhibernateの間にリポジトリのようなパターンを使用しています)。
[WebMethod]
public User GetUser(int userid)
{
session = GetCurrentSession();
return session.Load<User>(userid);
}
Webサービスはユーザーをシリアル化することを期待しており、NHibernateはUserProxy(正確にはユーザーではありません)を提供します。これをどのように克服する必要がありますか?