C# 如何解决删除操作中的DBUpdateException
使用VS 2012、C#、WPF 尝试创建使用数据库的简单程序。目标是在程序中实现CRUD操作。目前,我对删除操作有点紧张-删除过程中出现异常C# 如何解决删除操作中的DBUpdateException,c#,wpf,database,database-design,crud,C#,Wpf,Database,Database Design,Crud,使用VS 2012、C#、WPF 尝试创建使用数据库的简单程序。目标是在程序中实现CRUD操作。目前,我对删除操作有点紧张-删除过程中出现异常DBUpdateException 内部异常 InnerException文本-{“DELETE语句与引用约束“FK\U SpecialityStudent”冲突。冲突发生在数据库“EducationDataBase\”表“dbo.StudentSet\”列“SpecialityId”中。\r\n语句已终止。} 据我所知,由于在另一个表(Student
DBUpdateException
内部异常
InnerException文本-{“DELETE语句与引用约束“FK\U SpecialityStudent”冲突。冲突发生在数据库“EducationDataBase\”表“dbo.StudentSet\”列“SpecialityId”中。\r\n语句已终止。}
据我所知,由于在另一个表(StudentSet)中使用了条目,所以无法删除表中的该条目。但当我创建数据库时,我在表之间建立了1对多关系,即
若我试图删除SpecialitySet的条目,那个么它并没有在其他表中使用-都可以。
所以关于删除,我建议,这种关系(如图中所示)意味着我可以随时删除专业条目,即使我在另一个表中使用它。我说得对吗?如果没有-你能更详细地解释一下我如何删除这样的条目吗。或者,我可能在创建数据库时出错。(问题)
用于删除的代码
private async void _deleteButton_Click(object sender, RoutedEventArgs e)
{
if (MessageBox.Show("Do you really want to remove speciality " + _specialityNameTextBox.Text + " ?",
"Remove Speciality", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
{
using (var dbContext = new EducationDataBaseEntities())
{
foreach (var item in dbContext.SpecialitySet)
{
if (item.Name == _specialityNameTextBox.Text
&& item.Description == _descriptionTextBox.Text)
{
dbContext.SpecialitySet.Remove(item);
await dbContext.SaveChangesAsync();
MessageBox.Show("Speciality " + item.Description + "removed correctly",
"Remove speciality", MessageBoxButton.OK, MessageBoxImage.Information);
await LoadDataFromDB(this._specialityDataGrid);
}
}
}
}
else
{
MessageBox.Show("Operation canceled", "Canceled");
}
}
另外,若我现在就离开数据库,那个么如何删除已经使用的条目呢?或者我不能?你说得对。无法从SpecialitySet中删除引用自StudentSet的行,因为存在名为
FK_SpecialityStudent
的外键设置,该设置正在强制引用完整性。这是外键存在的原因之一——以确保不会创建孤立记录
通常,您会首先从StudentSet中删除关联行,然后从SpecialitySet中删除该行
或者,您可以将FK_SpecialityStudent
更改为级联删除。这意味着当您从SpecialitySet中删除一行时,StudentSet中的所有关联行也将被删除。要执行此操作,请查看此处关于删除级联的示例: