C#でのXMLシリアル化と1人の関係に多くのための優れたデザインで必要なヘルプ
-
26-09-2019 - |
質問
私は
の形でいくつかのデータを持っていると仮定すると、Customer1
Name
Address
Order1
ID
Products
Product1
ID
Product2
ID
Customer2
...
それを表現するために、次のクラスを使用します。
class Customer
{
public String name { get; set; }
public String Address {get; set;}
public List<OrderInfo> Orders { get; set; }
}
class Order
{
public int ID { get; set; }
public List<Product> Products { get; set; }
}
class Product
{
public int ID { get; set; }
}
私の代わりに、エンティティフレームワークとSQLを使用してのデータの書き込み/読み取りにXMLシリアル化を使用したいと思います。エンティティフレームワークで、私は、各製品が唯一のデータベースに一度格納されると、各順序はそれを参照しますように、1人の関係に多くを定義することができると思います。 XMLシリアル化と上記のコードを使用すると、それが格納された各製品の多くのコピー(メモリ内とXMLファイルの両方)があるだろうというのが私の理解です。
私はちょうど自分自身製品IDの代わりに、製品にリストを格納してからちょうど別のXMLファイルへの製品 "の分別収集をシリアル化できることを修正するために - 。しかし、それはきれいな解決策として私に当たりません
もう一つのアイデアは、顧客と製品のリストが含まれていRepositoryClassを持っていることであろう。顧客は、その後のみproductIDsを格納する必要があるだろうし、あなたがレポから「顧客」を要求したときに私のコードの残りの部分は、データが格納されていたかを心配する必要はありませんので、それが見上げると、上記目的を構築扱うでしょう。その音は、より良い解決策のようにしていますか?あなたはそれをどのように行うのでしょうか?
ソリューションそれのための他の要件は、私が直接のプロパティ(私は私ができることを1つのXMLファイルにすべてを格納するための方法が望む理由は、実際の編集にGUIへの解決策をフックアップすることも可能な限り簡単にそれをしたいことちょうど)WPFウィンドウに特異的に結合します。
自分の考えやアドバイスを事前に感謝!
解決
あなたは一度特定の製品をインスタンス化して、上からその製品を参照してください可能性があるため、メモリに保存されているいかなるコピーもないでしょう。
は、XMLの場合はもう少し複雑です。 XML仕様は、このためのソリューションを持っていますが、私は、.NETフレームワークは、これをサポートする方法もわかりません。あなたはこのようなXML文書を持っている可能性があります:
<rootElement>
<Customers>
<Customer ...>
<Order>
<ProductRef ref="1" />
<ProductRef ref="2" />
</Order>
</Customer>
</Customers>
<Products>
<Product id="1" />
<Product id="2" />
<Product id="3" />
<Product id="4" />
</Products>
</rootElement>
Aの検証XMLパーサはそのid
年代は、文書内の、あなたはDTDまたはこれを必要とするXMLスキーマを指定した場合、各ref
属性が実際にid
を指します。
もちろん、あなたはまだビルドにこの構造を解析していないが、あなたは、もはや重複したXMLデータを持っている何かを持っていると思います。
他のヒント
.NETでDataContractDeserializerはpreserveObjectReferencesと呼ばれるコンストラクタの引数を持っています。この引数をtrueに設定すると(デフォルトはfalse)オブジェクトの同一性が維持されます。詳しくは: http://msdn.microsoft.com/en-us/library /ms731073.aspxする