1

データベース内の「プロジェクト」レコードと、それに関連付けられているすべての「オプション項目」を削除する方法があります。

public bool DeleteProjectById(int id)
{
    using (DbContext db = new DbContext(ConfigHelper.Instance().ConnectionString))
    {
        try
        {
            foreach (var entity in db.ProjectOptionItems.Where(o => o.ProjectId == id))
                db.ProjectOptionItems.DeleteObject(entity);

            db.SaveChanges();

            var project = db.Projects.SingleOrDefault(o => o.Id == id);
            db.Projects.DeleteObject(project);

            db.SaveChanges();
            return true;
        }
        catch (Exception e)
        {
            ErrorLoggingService.Log(this, e);
            return false;
        }
    }
}

これは正常に機能します。しかし、db.SaveChangesへの最初の呼び出しをコメントアウトすると、コードがどうなるかを期待していましたが、これによりSQL例外が発生します(DELETEステートメントがREFERENCE制約と競合しました)。

SaveChanges()を2回呼び出すことは機能しますが、これは確かにそれを行う方法ではありません。助けてください。ありがとう!

4

1 に答える 1

5

AliRizaが言ったように、SQLサーバーに設定します。さらに、DbContextクラスでこれを使用します。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<ProjectOptionItems>().WillCascadeOnDelete();
}
于 2013-03-25T08:24:51.783 に答える