0

Context、Component、ComponentContext の 3 つのテーブルがあります。ComponentContext テーブルは、Component と Context を N:M の関係にリンクします。

これらのテーブルに大量のデータをインポートする C# プロジェクトに取り組んでいます。Entity モデルを使用しているため、コード内には Component エンティティと Context エンティティしか表示されません。

さて、これらのエンティティのみを使用して、3 つのテーブルすべての内容を削除することは可能でしょうか? たとえば、これを使用できます:

foreach (var obj in CPE.Context) { CPE.DeleteObject(obj); }

すべてのコンテキスト レコードを削除するには。(CPE は Context エンティティ モデルです。) Context には Components との関係があるため、これはもちろん失敗します。だから私は別の方法が必要です。

(はい、SQL を使用して同じことを行うことができますが、これはエンティティ モデルの「使いやすさの証明」のためなので、可能な限りモデル内で行いたいと考えています。)

4

1 に答える 1

0

そして、自分のコードが愚かであることに気付きました。Context レコードを削除しない理由として、別のテーブルへの参照について不平を言いました。新しいComponentContextテーブルを追加したばかりなので、それを非難しましたが、次回はこれらのエラーメッセージをもっと注意深く読む必要があります. (Context テーブルにリンクされた別のテーブルがありました。)

とにかく、これらの関係を削除するには、次のコードで十分です。

foreach (var obj in CPE.Components.ToList())
{
    obj.Context.Load();
    foreach (var child in obj.Context.ToList()) { obj.Context.Remove(child); }
    CPE.DeleteObject(obj);
}

私は習慣から ToList() を使用しています。.NET がレコードを読み取る方向に関連するいくつかの例外を回避する傾向があります。今では、最初にリストを埋めてから、好きな方向にリストをたどります...

于 2009-06-10T14:27:33.813 に答える