DELETE ステートメントは、SAME TABLE REFERENCE 制約 "FK_AuthCategories_Parent" と競合しました。データベース「MyDB」、テーブル「dbo.AuthCategories」、列「ParentID」で競合が発生しました。
ParentID の自己参照 FK を持つテーブル内のすべてを削除しようとすると、基本的に最初に子を削除する必要があるという上記のエラーが表示されます (つまり、FK を壊す子を持つ親アイテムを削除しようとします)。
var dc = from c in db.AuthCategories
select c;
db.AuthCategories.DeleteAllOnSubmit(dc);
db.SubmitChanges();
カスケード削除を処理しながらテーブル内のすべてを削除する単純な LINQ to SQL クエリはありますか?
- Triggers や ON DELETE CASCADE などの SQL サーバー側のソリューションを使用したくない
- EF ではなく LINQ to SQL を使用する必要がある
- できればワンライナーで、できるだけシンプルにしたい
テーブル構造は次のとおりです。
[Table(Name = "AuthCategories")]
public class AuthCategory
{
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int ID { get; set; }
[Column]
public string Name { get; set; }
[Column]
private int? ParentID { get; set; }
private EntityRef<AuthCategory> parent;
[Association(IsForeignKey = true, ThisKey = "ParentID")]
public AuthCategory Parent
{
get { return parent.Entity; }
set { parent.Entity = value; }
}
}