0

次のクラスがあります。

public class Discount 
{
    public override int Id { get; set; }
    public virtual IList<Region> Regions { get; set; }
}

public class Region
{
    public override int Id { get; set; }
    public int DiscountId { get; set; }
    public virtual Discount Discount { get; set; }
    public int Region { get; set; }
}

ディスカウントを削除するときは、次のコードを使用して、関連する地域でカスケード削除を実行する必要があります。

foreach (var discount in discounts) {
    context.Discounts.Remove(discount);
}

呼び出すとcontext.SaveChanges()、次のエラーが発生します。

DELETE ステートメントが REFERENCE 制約 "FK_dbo.Region_dbo.Discount_DiscountId" と競合しました。データベース「Portal」、テーブル「dbo.Region」、列「DiscountId」で競合が発生しました。

しかし、上記のループをデバッグforし、コンテキストから割引を削除した直後に、削除された割引を調べると、リージョンが 0 であることを示しています。それからそれを呼び出すcontext.SaveChanges()とうまくいきます!

何が起こっているのか、デバッグしていないときにどのように動作させることができるのでしょうか?

4

1 に答える 1

0

OK - オブジェクトを遅延ロードする場合、カスケード削除を行うことができないことに気付きました。これは理にかなっています。

于 2013-10-24T15:31:12.353 に答える