2011-01-11 63 views
2

alt text如何让列接受空值为零(0)在自关联表

作为图像中所描述的,我有一个parent-Children relation并且由于ParentID不接受空值(我不能更改为nullabel由于我有一些限制),我怎么能删除ReportDataSources之间的存在关系,以改变他们的父母(这里我想为他们其中的一个= 0设置parentId)我怎么能的是,由于i cant change the ParentID directly和设置Parent = null无效

public void SetReportDataSourceAsMaster(ReportDataSource reportDataSource) 
{ 
    //Reset Master 
    this.ReportDataSources.ToList().ForEach(rds => rds.IsMaster = false); 
    //Set Master 
    reportDataSource.IsMaster = true; 
    //Set Parent ID for the rest of the Reports data sources 
    this.ReportDataSources.Where(rds => rds.ID != reportDataSource.ID).ToList().ForEach(rds => 
    { 
     //Change Parent ID 
     rds.Parent = reportDataSource; 
     //Remove filttering data 
     rds.FilteringDataMembers.Clear(); 
     //Remove Grouping Data 
     rds.GroupingDataMembers.Clear(); 
    }); 
    //Delete parent HERE THE EXCEPTION THROWN AFTER CALLING SUBMITCHANGES() 
    reportDataSource.Parent = null; 
} 

异常吨调用SubmitChanges()后hrown:

试图删除ReportDataSource和ReportDataSource之间的关系。但是,关系的外键之一(ReportDataSource.ParentID)不能设置为空。

回答

1

难道你不能让你的根元素成为它自己的父元素吗?每次你想递归查找一个元素祖先时(为了避免无止境的循环),你都必须检查它,但是我认为它对你来说工作正常。

+0

+1我现在正在测试这个解决方案,如果有任何技巧我可以在LINQ中避免“selfParent”设置会更好 – 2011-01-11 11:17:40