2017-02-10 9 views
0

私のteamオブジェクトは次のとおりです。selectステートメントを使用してメンバーのみを取得しようとしています。私が抱えている問題は、結果が得られていますが、結果は「フラット」なので、POCOオブジェクトにマッピングされていないため、位置が失われています。サブオブジェクトを持つDocumentDb SELECT

teamオブジェクトは、次のようになります。

{ 
    id: 123, 
    name: "My Team", 
    members: [ 
    { 
     id: 789, 
     name: "John Smith", 
     position: 
     { 
      id: 444, 
      name: "Manager" 
     } 
    }, 
    { 
     id: 987, 
     name: "Jane Doe", 
     position: 
     { 
      id: 222, 
      name: "Director" 
     } 
    } 
    ] 
} 

select文は次のようになります。

だから、
SELECT m.id, m.name, m.position.id as positionId, m.position.name as positionName 
FROM Teams t 
JOIN m IN t.members 
WHERE t.id = 123 

、私は上記のselect文を実行したときに、私は以下を示して何を取得していますメンバーのオブジェクト形状がPOCOオブジェクトと一致しないため、位置情報が消えます。

[ 
    { 
    id: 789, 
    name: "John Smith", 
    positionId: 444, 
    positionName: "Manager" 
    }, 
    { 
    id: 987, 
    name: "Jane Doe", 
    positionId: 222, 
    positionName: "Director" 
    } 

]

私のC#POCOオブジェクトの形状は、JSONオブジェクトに一致します。だから、私はMemberオブジェクト内にPositionオブジェクトを持っています。

メンバーをデータベースに登録するにはどうすればよいですか?

更新日: selectステートメントを次のように変更してうまくいきました。これで、私のPOCOオブジェクトの正確な形状が自動的にわかります。

答えて

0

シンプルなDTOを使用して後でPOCOにマップすることをお勧めします(手動またはオートマッペを使用して)。あなたのアプリが使っているものからDB制御フォーマットを分離することは合理的だと思われます。

もう一つの選択肢はhttp://www.newtonsoft.com/json/help/html/CustomJsonConverter.htmですが、特殊なDTOとマッピングよりも複雑です。

+0

私は既にDAOオブジェクトを使用し、DALとドメイン間のマッピングを処理しています。私は常にDocumentDbからDAOオブジェクトを読んで、シェイプを正しく取得することについて心配する必要はありません。とにかく、私は解決策を見つけて元の投稿を更新しました。それは明らかな解決策でした。なぜ私がそれを早く考えなかったのか分かりません。 – Sam

関連する問題