0

同じタイプの 2 つのオブジェクトを比較して、変更が行われたかどうかを確認しようとしています。プロセスを説明しましょう:

ページの読み込み時にフォームが入力されます。フォームが入力されたら、元のデータをセッション変数に保存します。

newForm = FormRegistry.GetData(userID);
Session["oldForm"] = newForm;

いくつかの変更後にフォームが保存されると、2 つのオブジェクトを比較すると、常に同じになります。Session["oldForm"] に格納されたデータは、変更された newForm オブジェクトと同じです。

私はEntity Frameworkを使用しており、最初にデータベースを使用してオブジェクトを生成しました。これは、1 対 N の関係を持つオブジェクトでのみ発生します。このプロセスは、関係のないオブジェクトで完全に機能します。

何が起こっているのか、この問題を解決する方法を誰か教えてもらえますか?

4

2 に答える 2

0

さて、私は何が起こっているのかについてもっと感謝していると思いますが、間違っているかもしれません. 私は最初に、毎回新しいオブジェクトを作成するリクエスト間でデータを保存し、それに対して何らかの比較を行う場所を考えました。

同じリクエスト内で保存する前後のフォームデータを比較して作業しているように聞こえます。いずれにせよ、オブジェクトへの参照を実際に保存しているため、同じオブジェクトをそれ自体と効果的に比較しているように聞こえます。

比較するオブジェクトのクローンを取得することを検討する必要があると思います。シリアル化は、可能であればオブジェクトのコピーを作成する簡単な方法の 1 つです。

このスレッドが役立つ場合があります: C# オブジェクトのディープ コピー

于 2013-04-04T23:12:32.453 に答える
0

いくつかの簡単なアイデア - まず、複雑なオブジェクトを == 演算子と比較するのはうまくいかないことがわかりました。使用object1.Equals(object2)する必要があります - 次に、基本的にプロパティを反復して比較する Equals() メソッドを実装 (つまりオーバーライド) する必要があります。各。

また、ヌルが邪魔になります。このケースを明示的に確認する必要があります。このリファレンスは役に立ちます MSDN: Equals() のオーバーロードに関するガイドライン

お役に立てれば。

于 2013-04-04T18:54:09.957 に答える