0

次の方法でマッピングされたドメイン モデルを使用しています。

  • 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 にキャスト バックする必要がありますか?それともエンティティ タイプを使用する必要がありますか?

4

1 に答える 1

2

var result = session.Load<Product>(1);動作しません。Load()エンティティがまだセッションにない場合は、プロキシを返します。そのエンティティ型のプロキシはインターフェイスProductを実装するだけでよいと NHibernate に伝えた場合、NHibernate はその型のプロキシ (継承されたクラス) をどのように作成する必要がありますか?IProductProxy

于 2013-05-08T06:03:48.037 に答える