我的模型如图所示。
代码:
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
我查看了其他帖子,不幸的是修复程序要么不适用于我,要么它们不起作用。任何帮助将不胜感激。
答案 0 :(得分:2)
发现了这个问题。我没有从myBusinessAreas的进程导航中删除myProcess,而是将其从我的上下文的进程实体中删除。