1

私はしばらくこれと戦ってきました。多対1の関連付けを実装しようとしています。テーブルには、読み取り値と呼ばれる行がたくさんあります。これらは時間の経過とともに蓄積され、時々私はそれらをエクスポートしたいと思います。それらをエクスポートするときに、ExportEventという新しいオブジェクトを作成して、エクスポートされた行を追跡し、必要に応じて再エクスポートできるようにします。したがって、Readingは、エクスポートする前にReadingsを作成するため、ExportEventとnull許容の外部キー関係にあります。

私が見つけたのは、次にエクスポートを実行するときに、最初にExportEvent(evt)を作成し、を使用して読み取り値を追加するかどうかです。

evt.Readings.AddRange(), 

または私が使用する場合

foreach(reading) 
reading.ExportEvent = evt

SubmitChangesを呼び出すと、evtへの関連付けで作成された新しい読み取り値が常に取得され、元のレコードは更新されません。

ただし、これを最も単純なものに戻しましたが、関連付けなしで2つのオブジェクトを作成できるかどうかを確認するために、すべての読み取り値を取得してそれらのint値を更新したときにも、submitchangesによって多数の新しいレコードが挿入されていることがわかりました。 。どうしたの?

4

2 に答える 2

3

うーん。興味深い-ブックマークのこのリンクをクリックしたところ、質問が復活したことがわかったので、(困惑した)解決策を提供します。私のすべてのエンティティには、監査データのプロパティ(CreatedDateとUpdatedDate)があります。したがって、データコンテキスト内の各エンティティの挿入と更新のための部分的なメソッドを実装しました。新しく作成されたエンティティのこれらの挿入および更新メソッドの一部をコピーして貼り付けました(これが何らかの落ち込みの原因となる頻度はどれくらいですか)。その結果、Update[blah]メソッドがExecuteDynamicUpdateではなくExecuteDynamicInsertを呼び出していたというエラーもコピーしました。

この問題を3時間必死に解決しようとしていたとき、私は非常にイライラしたと言えば十分ですが、それは(愚かな)コピー/貼り付けエラーが原因であることがわかりました-そして私が約3分後にエラーを見つけただけですdはこの質問を投稿しました!

これが誰かを助けることを願っています。

于 2009-11-25T00:01:12.130 に答える
0

あなたが電話しているからだと思いますAddRange()。これにより、新しいオブジェクトがデータ コンテキストに追加されます。Attach()代わりに、データ コンテキストで呼び出して、既存のオブジェクトを再アタッチしてみてください。

(または、それらをデタッチせずに元のデータ コンテキストが残っている場合は、何もする必要はなく、オブジェクトに変更を加えて を呼び出すだけですSubmitChanges())

于 2009-11-18T10:53:10.590 に答える