我有一种删除数据库中“项目”记录的方法,以及与之关联的所有“选项”。
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()有效,但肯定不是这样做的。请帮忙。谢谢!
答案 0 :(得分:5)
就像AliRiza所说的那样,在你的SQL服务器中设置它。另外在DbContext
课程中使用它:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ProjectOptionItems>().WillCascadeOnDelete();
}