2011-07-22 7 views
1

要するに、XMLデータを取得してテーブルに格納しようとしています。私に問題を与えて構造が現在そうのようになります。このことから同じオブジェクト構造から同じテーブル内に複数の行を生成する

<Event> 
    <PhaseOne>...</PhaseOne> 
    <PhaseTwo>...</PhaseTwo> 
    <PhaseThree>...</PhaseThree> 
    <EventID>12345</EventID> 
    <EventDate>09/09/09</EventDate> 
</Event> 

最終結果は私のイベント・テーブルで3行(各<Phase>に1つ)です。各行は、それぞれ<Phase>要素内のデータを必要とするだけでなく、<EventID>などの親レベル値も必要とします。

XMLをデシリアライズするためにXSD.exeの生成クラスがありますが、正しい結果を生成するためにEFコードの最初のマッピングを設定する方法が失われています。

それぞれの<Phase>クラスを同じテーブルにマップするだけで、親レベルの値(<EventID>)をその行のどのようにマップするかわかりません。

残念ながら、私はXMLまたはテーブルスキーマを変更できません。

答えて

0

私のソリューション

とあなたの非直列化された型を持続しないでください

  • 読み込みXMLから直接あなたの持続種類を記入それらを手動でデシリアライズ後に移入します。

  • 0

    デシリアライズされた型と永続化された型を分離する必要があります。 EFは必要なものをサポートしていないため、デシリアライズ型のマッピングを設定することはできません。選択肢は次のとおりです。

    • は、永続性のために別々の種類を作成して、直列化復元を使用しないでください非直列化されたタイプの
    • からそれらを埋める(またはあなた自身を書く)XmlDocumentXmlReaderまたはXElementのいずれかではなく手動プロセスのXMLをして。私は、各PhaseEventIDEventDateメンバーのコピーを追加EFを使用してストアドプロシージャ
    +0

    あなたの提案はすべて明白です。私は、EFマッピングを使用して、自分の子クラス内の上位レベルの値にアクセスできることを明確にすることを探していました。少なくとも、私はこれらの構造体を '[XmlIgnore]'で追加し、より論理的な選択肢である手動でデシリアライズ後にそれらを移入することができます。 –

    +0

    はい、それは私が考えなかった第四の選択肢になります。 –

    関連する問題