删除实体时我得到以下错误:由于一个或多个外键属性不可为空,因此无法更改关系

时间:2013-09-09 23:33:57

标签: c# entity-framework-4.1

我的模型如图所示。

enter image description here

代码:

            App MyApp = (App)Application.Current;

            WFE = new WorkflowMenuEntities();
            WFE.Database.Connection.ConnectionString = MyApp.WorkflowMenuEntityConnectionString;


            string Input = Microsoft.VisualBasic.Interaction.InputBox("Deleting this Business Area will delete ALL processes associated with it.  If you are sure you wish to continue please type in delete and press ok.", "Confirm Deletion");

            if (Input == "delete")
            {
                int BusinessID = ((BusinessArea)ComboboxBusinessArea.SelectedItem).ID;

                BusinessArea myBusinessArea = WFE.BusinessAreas.Where(BA => BA.ID == BusinessID).FirstOrDefault();

                foreach (var myProcesses in myBusinessArea.Processes.ToList())
                {

                    foreach (var myWorkerProcess in myProcesses.WorkerProcesses.ToList())
                    {

                        myProcesses.WorkerProcesses.Remove(myWorkerProcess);


                    }

                    myBusinessArea.Processes.Remove(myProcesses);

                }

                foreach (var myADGroup in myBusinessArea.ADGroups.ToList())
                {
                    myBusinessArea.ADGroups.Remove(myADGroup);
                }



                WFE.BusinessAreas.Remove(myBusinessArea);
                WFE.SaveChanges();

                BuildBusinessAreaList();


            }

当我运行此代码时,它会在WFE.SaveChanges行出错并出现以下错误。

  

System.InvalidOperationException:操作失败:   由于一个或多个关系无法改变   外键属性是不可为空的。当对a进行更改时   关系,相关的外键属性设置为空值。   如果外键不支持空值,则为新关系   必须定义外键属性必须另外分配   必须删除非空值或不相关的对象。在   System.Data.Objects.ObjectContext.SaveChanges(SaveOptions选项)
  在System.Data.Entity.Internal.InternalContext.SaveChanges()at   System.Data.Entity.Internal.LazyInternalContext.SaveChanges()at   System.Data.Entity.DbContext.SaveChanges()at   ManageBusinessAreas.MainWindow.ButtonDeleteBusinessArea_Click(对象   发件人,RoutedEventArgs e)in   C:\ TFS_Source \ SharedApps \ AdminProcesses \ ManageBusinessAreas \ ManageBusinessAreas \ ManageBusinessAreas \ MainWindow.xaml.cs:线   249

我查看了其他帖子,不幸的是修复程序要么不适用于我,要么它们不起作用。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

发现了这个问题。我没有从myBusinessAreas的进程导航中删除myProcess,而是将其从我的上下文的进程实体中删除。