从外键删除记录时从实体框架中的错误
问题描述:
我试图从与其他表与外键共享关系的表中删除记录。因此,在我删除任务记录之前,我先删除其他相关表中的记录,如下面的代码所示。从外键删除记录时从实体框架中的错误
public BusinessResult DeleteTask(int taskID)
{
Validator validator = new Validator();
if (validator.NotZeroOrLower(taskID, TaskErrors.InvalidTaskID).IsValid)
{
DBTask dbTask = _TaskRepository.FindBy(task => task.ID == taskID,
task => task.WorkProcedureTasks).SingleOrDefault();
if (validator.NullObject(dbTask, false, TaskErrors.InvalidTaskID).IsValid
&& validator.Bool(dbTask.ClientWorkProcedureTasks.Count == 0, true, TaskErrors.TaskIsInUse).IsValid)
{
try
{
if (dbTask.WorkProcedureTasks.Count != 0)
{
List<int> workProcIDs = dbTask.WorkProcedureTasks.Select(w => w.WorkProcedureID).ToList();
DeleteDependentRecords<DBWorkProcedureTask>(entity => entity.TaskID == taskID);
foreach (int workProcID in workProcIDs)
{
DBWorkProcedure dbWkproc = _WorkProcedureRepository.FindBy(proc => proc.ID == workProcID).First();
dbWkproc.SubJobs.Clear();
_WorkProcedureRepository.Delete(dbWkproc);
}
_WorkProcedureRepository.Save();
}
ClearTasksByType(dbTask.ID);
_TaskRepository.Refresh(dbTask);
_TaskRepository.Delete(dbTask);
_TaskRepository.Save();
dbTask.
}
catch (Exception e)
{
string err = e.Message.ToString();
}
}
}
return validator.Result;
}
只要代码点击_TaskRepository.Save();
崩溃与错误:
The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable.
当我再次运行该删除过程,它工作正常。 refresh()不起作用,所以我能做些什么才能使其正常工作?
答
你有很多很多,你是不是删除它正确
dbWkproc.SubJobs.Clear();
更改为
_context.SubJobs.RemoveRange(dbWkproc.SubJobs)
或者,如果你没有在上下文中则
_context.Set<SubJobsType>().RemoveRange(dbWkproc.SubJobs)
原因子作业为什么它抛出的异常是,EF“认为”你将连接到这个链接你的DBWork的表的连接删除Procedure和SubJob类型,而不是删除连接记录,它尝试在该记录中将DbWorkProcedure设置为null