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() 进行两次调用是可行的,但肯定不是这样做的。请帮忙。谢谢!

4

1 回答 1

5

就像 AliRiza 所说,将它设置在您的 SQL 服务器中。另外在你的DbContext课堂上使用它:

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