请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

删除客户时报错(无Ondelete)

 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内部报错。

正在回答 回答被采纳积分+3

4回答

慕九州232296 2022-05-21 22:13:54

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

1 回复 有任何疑惑可以回复我~
  • 提问者 979811597 #1
    😂那这个问题应该怎么解决呢
    回复 有任何疑惑可以回复我~ 2022-05-22 11:11:29
阿莱克斯刘 2022-06-03 08:36:09

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

0 回复 有任何疑惑可以回复我~
慕九州232296 2022-05-22 11:20:52

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

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

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

0 回复 有任何疑惑可以回复我~
  • 提问者 979811597 #1
    插入数据时没有问题,只有删除客户的时候才会报错,删除时并不会删除整行数据,而只是会把关联的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 16:32:58
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信