2009-04-02 17 views
0

他の人が次のシナリオにどのように対処しているかを知りたい。c#データベースの永続性のためのオブジェクトの等価性

これは宿題でも種類の割り当てでもありません。サンプルクラスは私の質問をよりよく説明するために作成されていますが、実際のライフシナリオを反映しており、フィードバックを希望しています。

データベースからすべてのデータを取得し、オブジェクトに配置します。オブジェクトは単一のレコードを表し、複数のレコードがデータベースに存在する場合、レコードオブジェクトのリスト<>にデータを置きます。

以下のクラスがあります。

public class Employee 
    { 
     public bool _Modified; 
     public string _FirstName; 
     public string _LastName; 
     public List<Emplyee_Address> _Address; 
    } 

    public class Employee_Address 
    { 
     public bool _Modified; 
     public string _Address; 
     public string _City; 
     public string _State; 
    } 

明瞭にするために、ゲッターとセッターはクラスから省略されています。コードの警察が私にそれらを使用していないと非難している前に、この例のために除外されていることに注意してください。

このデータベースには、従業員用のテーブルと従業員アドレス用のテーブルがあります。

概念的には、データベーステーブルのデータを表すListオブジェクトを作成することです。このオブジェクトの深いクローンを作成し、フロントエンドのコントロールにバインドします。次に、データベースからのデータを表す2つのオブジェクト(OrigとFinal)があります。

ユーザは、レコードの作成、変更、削除によって「最終」オブジェクトに変更を加えます。そして、これらの変更をデータベースに保存します。

私たちは可能な限りエレガントで、必要なレコードを編集、作成、削除するだけです。

最終的に、2つのリストオブジェクトを比較してできるようにしたいと思います。

  1. 変更をデータベースに保存できるように変更されたプロパティを確認します。

  2. これらのレコードをデータベースから削除できるように、2番目のリスト<にはどのプロパティ(レコード)が存在しなくなったかを確認してください。

  3. 新しいリスト<に存在する新しいプロパティを参照して、これらをデータベースに作成できるようにします。

私たちは、これを達成するためにどのようにボールを回転させたいのですか。また、トップレベルのプロパティだけでなく、変更を確認するためにEmployee_Addressリストにドリルダウンする必要があることに注意してください。

私は自分自身を明確にし、どんな提案も楽しみにしたいと思います。

答えて

0

.NETは、Dataクラスでは、レコードの状態(System.Data.DataRowStateが頭に浮かぶ)とすべての関連するバージョンを1つのオブジェクトにまとめて保存することとまったく同じことを行います。

この方法:

  • あなたはそれが変更、挿入、削除、またはまだ元の記録であるされているかどうかを一目で知ることができます。
  • 新しいバージョンと古いバージョンを照会することで、変更された内容をすばやく見つけることができます。別のコレクションを参照して古いバージョンを見つける必要はありません。
0

なぜ2つのリストオブジェクトを比較したいですか?本質的に重複するデータのために、多くのメモリを使用する可能性があります。

私は、そのオブジェクトがNew、Deleted、またはChangedであるかどうかを知ることができる各オブジェクトのステータスプロパティを持つことをお勧めします。プロパティをEnumにする以外にも、更新する変更を含む辞書を含むオブジェクトにすることができますが、変更された状態の場合にのみ適用されます。

あなたがそのようなプロパティを追加したら、などあなたはEntity Frameworkのは、この種を行う方法を確認したいことがあり

を削除されたオブジェクトを削除し、新しいオブジェクトを追加し、あなたのリストを通過するのは簡単でなければなりませんもののも。

0

Identity Mapパターンの使用を調査する必要があります。 Unit of Workと組み合わせることで、データベースに保存する必要のあるオブジェクトを確認できるソートのオブジェクト "キャッシュ"を維持したり、読み取り時に新しいオブジェクトを作成して返すのではなく、アイデンティティマップからオブジェクトを返すことができます。

1

null可能なObjectIDフィールドをレイヤの基本タイプに追加します。フロントエンドに渡し、特定のインスタンスがデータベースに残っているかどうかを確認します。 アイデンティティマップが一切ない場合でも他にも多くの用途があります

関連する問題