删除客户时报错(无Ondelete)

来源:11-6 【重构】ORM数据管理(下)

979811597

2022-05-21

 private void DeleteCustomer_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                var customerId = customerList.SelectedValue;
                using (var db = new AppDbContext())
                {
                    var customerToRemove=db.Customers.Include(c=>c.Appointments).Where(c=> c.Id==(int)customerId).FirstOrDefault();
                    db.Customers.Remove(customerToRemove);
                    db.SaveChanges();
                }
            }
            catch (Exception error)
            {
                MessageBox.Show(error.ToString());
            }
            finally
            {
                ShowCustomers();
            }
        }

代码如上。

在AppDbContext.cs文件中没有找到Ondelete,但是在删除是还是报错,即可以删除没有预约的客户,但是在删除有预约的客户的就会报异常。

异常原因如下:

SqlException: Cannot insert the value NULL into column ‘CustomerId’, table ‘master.dbo.Appointments’; column does not allow nulls. UPDATE fails.

The statement has been terminated.

打了断点,发现就是DeleteCustomer_Click内部报错。

写回答

4回答

慕九州232296

2022-05-21

……你的报错跟你的代码有关系吗?异常说的是不能在不允许的字段上插入null

1
1
979811597
😂那这个问题应该怎么解决呢
2022-05-22
共1条回复

阿莱克斯刘

2022-06-03

hello 同学,不好意思,这个问题我遗漏了。你现在解决了吗?

0
0

慕九州232296

2022-05-22

至于你贴出来的代码,存在的问题是,客户表与预约表存在外键关联,因此在删除客户之前要先把该客户对应的预约数据全部删掉,然后再去删除客户,就好了

0
1
979811597
是的,删除客户之前应该把客户对应的预约数据都给删掉,老师在之前的代码中就是这么做的,但是在这一章里说entityframework已经帮我们处理好了,所以就没有先删除所有的预约数据,所以在删除的时候就会报错。我的解决方法,是把Appointments.CustomerId这一个字段设置为可空类型,这样的话不会报错了,但是会有很多冗余的数据,比如说Time字段中的数据依旧会有保留。
2022-05-22
共1条回复

慕九州232296

2022-05-22

以你的报错来说的话,你插入数据的时候,非空字段要加上数据就可以了,也就是你在添加预约的时候,没有把customerId带上,你带上后再添加预约问题提就解决了

0
1
979811597
插入数据时没有问题,只有删除客户的时候才会报错,删除时并不会删除整行数据,而只是会把关联的ID删掉,但是关联的Appointments的CustomerId不能为空,所以会报错 try { using (var db=new AppDbContext()) { var appointment = new Appointment() { Time = DateTime.Parse(AppointmentDatePicker.Text), CustomerId=(int)customerList.SelectedValue }; db.Appointments.Add(appointment); db.SaveChanges(); } }
2022-05-22
共1条回复

C#速成指南--从入门到进阶,实战WPF与Unity3D开发

系统掌握C#核心和应用,获得全行业适配的技能

839 学习 · 198 问题

查看课程