2016年6月28日火曜日

InvalidConstraintException

System.Data.InvalidConstraintException ForeignKeyConstraint FK_xxx_yyy によって制約が実行され、xxx に子行が存在するため、テーブル yyy を消去できません。

new yyyTableAdapter().Fill(dataSet1.yyy);

リレーションが、

親テーブル yyy
└子テーブル xxx

「制約が有効」な状態です。

内部的には、親テーブル yyy の内容を消して(Clear)、フィル(Fill)しようとしている。

子テーブル xxx にデータが存在する場合、親が Clear によって消えてしまう。ここで制約違反が発生。

回避方法:
  • yyyTableAdapter の ClearBeforeFill を False にしてから、Fill を実行。
  • dataSet1.EnforceConstraint = False にしてから、Fill する。すると、制約違反は検知されなくなるので、自由にテーブルを構築できる。
ClearBeforeFill について・・・他の人がレコードを削除する場合が有るので、それを反映する方法として一旦全部消去する方法が有効。

0 件のコメント:

コメントを投稿