次の方法でマッピングされたドメイン モデルを使用しています。
- IProxy コントラクト (Id を含む)
- コントラクトを実装するエンティティ クラス
例:
public class Product : IProductProxy {}
クラスは、次のロジックを使用してマップされます。
<class name="Product" table="[Products]" lazy="true" proxy="IProductProxy">
現在、次の方法が適切に機能することがわかりました。
var result = session.Load<IProductProxy >(1);
var result = session.Get<IProductProxy>(1);
var result = session.Get<Product>(1);
これらのメソッドは「プロキシ例外」または「無効なキャスト例外」をスローしますが、
var result = session.Load<Product>(1);
私が知る必要があるのは、プロキシと NHibernate を使用する正しい方法は何かということです。たとえば、インターフェイスを直接操作しても問題ないと思いますが、これを実行しようとすると:
// successful save
var result = session.Get<Customer>("ALFKI");
result.Name = "XXX";
session.Update(result);
// if error occurs I receive wrong exception
// cannot find mapping for ICustomerProxy ERROR
var result = session.Get<ICustomerProxy>("ALFKI");
result.Name = "XXX";
session.Update(result);
常に IProxy にキャスト バックする必要がありますか?それともエンティティ タイプを使用する必要がありますか?