典型的な1対多の関係では、次のように削除すると次のようになります。
var orderEntity = context.Orders.Single(o => o.orderID == entityID);
var baddetail = orderEntity.OrderDetails
.Single(od => od.orderDetailID == badOrderDetailID);
orderEntity.OrderDetails.Remove(baddetail);
エラーが発生します:
The operation failed: The relationship could not be changed because one
or more of the foreign-key properties is non-nullable. When a change is made
to a relationship, the related foreign-key property is set to a null value.
If the foreign-key does not support null values, a new relationship must
be defined, the foreign-key property must be assigned another non-null value,
or the unrelated object must be deleted.
DBContext.SaveChanges()を拡張するソリューションが提案されました
public override int SaveChanges()
{
foreach (OrderDetails od in this.OrderDetails.ToList())
{
// Remove OrderDetails without Order.
if (od.Order == null)
{
this.OrderDetail.Remove(od);
}
}
return base.SaveChanges();
}
しかし、orderIDがnull許容でない場合、OrdersがnullのOrderDetailsをチェックしているのは奇妙に思えます。これを行う適切な方法はどのようになっていますか?
編集:Order.OrderDetails
例として、この奇妙な削除は、とDataGrid
をバインドして公開したときに発生します。