Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决删除操作中的DBUpdateException_C#_Wpf_Database_Database Design_Crud - Fatal编程技术网

C# 如何解决删除操作中的DBUpdateException

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

使用VS 2012、C#、WPF

尝试创建使用数据库的简单程序。目标是在程序中实现CRUD操作。目前,我对删除操作有点紧张-删除过程中出现异常
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中的所有关联行也将被删除。要执行此操作,请查看此处关于删除级联的
示例: