2012-02-26 3 views
0

が登録されました。最初の質問:) NameプロパティとList of Statesプロパティを持つドメインモデルエンティティのエンティティがある場合。さらにその州には名前、州名簿のリストがあり、さらに、広州市は地方自治体を持っています。私はCountryDTOと国の実体をseriliazeしようとしていると私のコンストラクタは、次のようになります:DTOを作成すると、混乱したビット

より良いをexaplainするに

public CountryDTO(Country x) 
    { 
     Name = x.Name; 
     StateList = new List<StateDTO>(); 
     foreach (State state in x.States) 
     { 
      StateDTO stateDto = new StateDTO(state); 
      StateList.Add(stateDto); 
     }   
    } 

をしかし、私はこの>

public StateDTO(State x) 
    { 
     Name = x.Name; 
     CountryDTO Country = new CountryDTO(x.Country); 

     CantonList = new List<CantonDTO>(); 
     foreach (Canton c in x.Cantons) 
     { 
      CantonDTO cantonDto = new CantonDTO(c);    
      CantonList.Add(cantonDto); 
     } 
    } 
のように見えますStateDTOと深いつもりだとき

私のStateDTOは自分の国の親オブジェクトを認識する必要があるので、私はこの行を持っています。 CountryDTO Country = new CountryDTO(x.Country);これは問題です(再帰参照の可能性があります)。これは、Stateオブジェクトを親として持つCantonで発生します。 この親エンティティをロードしてこのエラーを回避する方法です。 Country.Nameのような親オブジェクトへの参照が文字列としてCountryNameが必要です。 public void StateDTO(State x, CountryDTO parent)public void StateDTO(State x)をし、その後StateDTO stateDto = new StateDTO(state, this);でそれを呼び出す:

希望、私はあなたが変更することができます:)

答えて

0

あなたの問題は、ドメインモデルを持っているものをミラーリングするにはあまりにも多くを試みていると思います。クライアント側で本当に必要なものを検討し、ドメイン内のものを複製するのではなく、それを反映させる方が良いでしょう。これは特に、サービスへの呼び出しを処理するたびに、国のすべての階層を全面的にシリアライズしているという点で特に真実です。ほぼすべての場合に返送するのはあまりにも多くのように思えます。ここでは、このよりよいことを説明する良い投稿です:

http://davybrion.com/blog/2012/02/dtos-should-transfer-data-not-entities/

0

十分に明らかになりました。

this演算子はCountryDTOインスタンスの逆であり、子に渡すことができます。

関連する問題