2009-06-10 8 views
0

私は3つのテーブルContext、Component、ComponentContextを持っています。 ComponentContextテーブルは、コンポーネントとコンテキストをN:Mの関係にリンクします。N:M関係とレコードの削除

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

これらのエンティティのみを使用すると、3つのテーブルすべての内容を削除できますか?たとえば、次のように使用できます。

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

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

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

答えて

0

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

、これらの関係を削除するには、このコードは十分です:

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がレコードを読み取る方向に関連するいくつかの例外を回避する傾向があります。今すぐ最初にリストを塗りつぶし、好きな方向にリストを歩いていきます。

関連する問題