|
分類:[データベース全般]
お世話になります。
EntityFrameworkで質問させて下さい。
使用言語:C#
データベースの状態が以下の場合とします。
[テーブル名:Directory]
|ID|Name|ParentId|
ーーーーーーーーーーー
|AA|Root|NULL |
|BB|Dir1|AA |
※ID…主キー
ParentId…外部キー(IDを参照している)
この時、下記のコードで例外が発生します。
using(var context = new DbContext)
{
var entity = context.Directory.FirstOrDefault(q => q.ID == "AA");
context.Directory.Remove(entity);
context.SaveChanges(); ←ここで例外発生
}
例外内容は以下のとおりです。
「DELETE ステートメントは
SAME TABLE REFERENCE 制約 "FK_dbo.Directory_dbo.Directory_ParentId" と競合しています。
競合が発生したのは、データベース "TestDataBase"、
テーブル \"dbo.Directory\", column 'ParentId' です。
ステートメントは終了されました。」
おそらくは外部キーで参照されているエンティティのため、
Removeが失敗しているのだと思っています。
参照先をすべてRemoveしてから、目的のエンティティをRemoveすれば動作はしますが、
できれば参照先をまとめて、一括でRemoveしたいと思います。
何か方法があれば、ご教授ください。
不足している情報等ありましたら追記いたしますので、
よろしくお願いします。
以上
|