0

私は次のエンティティフレームワークオブジェクトを持っています:
評価、ステージ、アパート
評価には多くのステージが含まれ、ステージには多くのアパートが含まれます。

次のように特定のステージを削除しようとしています。

var deletedStages =
  originalEvaluation.Stages.Where(s => s.State == StateTypes.Deleted);

deletedStages.ToList().ForEach(stage => 
{
  stage.Apartments.ToList().ForEach(
    apartment => stage.Apartments.Remove(apartment)
  );

  originalEvaluation.Stages.Remove(stage);
});

deletedStages.ToList().ForEach(stage =>
{
  stage.Apartments.ToList().ForEach(apartment =>
    shechtmanEntities.Apartments.DeleteObject(apartment)
  );

  shechtmanEntities.Stages.DeleteObject(stage);
});
}
}
try
{
  shechtmanEntities.SaveChanges();
}

しかし、例外が発生し続けます:「1つ以上の外部キープロパティがnull許容でないため、関係を変更できませんでした」

nullの外部キーに関係していることは知っていますが、どちらがわかりませんか?なぜ?

ありがとう。

4

2 に答える 2

0

評価またはステージを削除し、カスケード削除を使用して、子エンティティ(この場合はアパート)を個別に削除するのではなく、削除してみてください。

于 2013-01-15T09:14:02.870 に答える
0

カスケード削除ができない場合(SQLサーバーはそれについて面白いかもしれません:https : //stackoverflow.com/a/6065583/613004)asdutzuは提案します:

1対多の関係(そのように聞こえます)の場合は、親を削除する前に、各子オブジェクトを手動で削除し、変更を保存する必要があります。IEはアパートを削除し(または別のステージに再割り当てし)、次にステージを削除します。

それ以外の場合、多対多であり、結合テーブルがエンティティモデルを通じて公開されている場合は、最初にステージとアパートメント間の結合を削除してから、ステージを削除します。そうでない場合は、detachステージからアパートを作成し、ステージを削除する前に変更を保存します。

于 2013-01-15T09:23:48.463 に答える