1

Entity->Others という形式の参照制約を持つエンティティがあり、問題のエンティティを削除しようとしています。

エンティティをロードした後、削除してから保存すると、これは正常に機能します。

Entity entity = null;
entity = db.Entities.Where(o => o.Id == loadId).FirstOrDefault();

db.Entities.DeleteObject(entity);
db.SaveChanges();

参照制約を介して関連するタイプ Other のエンティティに単一のチェックを追加すると、保存時に例外がスローされる

Entity entity = null;
entity = db.Entities.Where(o => o.Id == loadId).FirstOrDefault();

entity.Others.Count();

db.Entities.DeleteObject(entity);
db.SaveChanges();

ただし、例外は次のとおりです。

操作に失敗しました: 1 つ以上の外部キー プロパティが null 非許容であるため、リレーションシップを変更できませんでした。リレーションシップに変更が加えられると、関連する外部キー プロパティが null 値に設定されます。外部キーが null 値をサポートしていない場合は、新しい関係を定義するか、外部キー プロパティに別の非 null 値を割り当てるか、関連のないオブジェクトを削除する必要があります。

ここには完全で最小限のコードがないため、あまり期待していませんが、単に Others にアクセスするとエンティティが無効になり、セーブバックする方法についての漠然とした提案をいただければ幸いです。

4

1 に答える 1

0

マッピングにエラーがあるようです。最初にデータベースを使用していて、データベースでカスケード削除が許可されEntityOrderいるが、EDMXモデルでは許可されていないか、データベースで存在OrdersなしEntity(null許容FK)が許可されているが、クラスでは許可されていません。

最初のケースでは、EDMXで関連付けを選択OnDeleteし、正しい方向でサポートするようにそのプロパティを変更します。後者の場合、Entityとの間のカーディナリティOrderが1-Nではなく0..1-Nであることを確認してください。FKを公開しOrderている場合は、それがnull許容であることを確認してください。

カスケード削除またはnull許容FKがない場合、最初の例ではエラーがスローされます(データベースで制約検証をオフにしていない限り)。Ordersこのような場合、プリンシパル()を削除する前に、まずすべての依存エンティティ( )を削除する必要がありますEntity

于 2012-10-03T08:45:36.223 に答える