DTOパターンを使用して、ドメインオブジェクトをサービスレイヤからリポジトリにマーシャリングし、次にNHibernate経由でデータベースにマーシャリングします。NHibernate、DTOs、NonUniqueObjectException
私は、DTOをリポジトリ(CustomerDTOなど)から取り出し、サービスレイヤのドメインオブジェクト(Customer)に変換するという問題に遭遇しました。次に、同じCustomerオブジェクトを含む新しいオブジェクト(SalesOrderなど)を保存してみます。これは、リポジトリにプッシュするためのSalesOrderDTO(およびCustomerDTO)に変換されます。
NHibernateはこれを好まない - それは、CustomerDTOが重複したレコードであると不平を言う。私はこれが同じセッションで最初のCustomerDTOを引っ張ったためであると仮定しています。戻り値が前後に変換されているため、これを同じオブジェクトとして認識できません。
私はここにこだわっているのですか、これを回避する方法はありますか?
おかげ
ジェームズ
あなたはロックを使用してNHibernateの中のセッションにオブジェクトを再接続することができ
返信いただきありがとうございます。私のドメインオブジェクトはプロパティでパブリックメソッドを設定していないため、私はDTOを使用しています。私はその後、工場を使ってDTOからドメインオブジェクトを作成します。 私の問題は、どのオブジェクトを再接続する必要があり、どのオブジェクトを新しいものにするかを知ることになると思います。たぶん、私のアプローチを考え直す必要があるかもしれません:( – James
一部のデータがある場所に格納され、別の場所に格納されているドメインオブジェクト(たとえば、それぞれDBファイルとXMLファイル)がある場合、DTOはしばしば必要です。データマッパーやリポジトリのサンプル実装がほとんど認めない複雑さの複雑さ。私はギャップを埋めるためにMartin FowlerのPoEAAを読むことを勧めます:http://is.gd/NmTt –