我在 Windows 窗体应用程序中有一个选中的列表框,允许用户将一个或多个安全组分配给选定的用户。
使用 WCF 数据服务,我可以毫无问题地填充该框。但是,当用户更改框中的选择并尝试保存这些更改时,我遇到了问题。
这是代码,并带有注释来解释我的逻辑。
private void ProcessSecurityGroupSelection_Original()
{
//Get a reference to the selected user, including the associated SecurityGroups.
var user = _ctx.Users
.AddQueryOption("$filter", "UserID eq " + ((DataService.User)lstUsers.SelectedItem).UserID)
.AddQueryOption("$expand", "SecurityGroups")
.First();
//Remove all the SecurityGroups so we can replace them.
user.SecurityGroups.Clear();
foreach (var selectedGroup in lstSecurityGroups.CheckedItems)
{
//Loop through the selected SecurityGroups, linking and adding each SecurityGroup to the User object.
var securityGroup = (from sg in _ctx.SecurityGroups
where sg.SecurityGroupID == ((DataService.SecurityGroup)selectedGroup).SecurityGroupID
select sg).First();
_ctx.AddLink(user, "SecurityGroups", securityGroup);
user.SecurityGroups.Add(securityGroup);
}
_ctx.UpdateObject(user);
_ctx.SaveChanges();
}
当代码命中之前选择的 SecurityGroup 的 AddLink 方法时,我收到一条错误消息,指出“上下文已经在跟踪关系”。Clear() 方法似乎没有删除上下文中的任何链接。
我该如何去删除现有的链接,还是我处理这一切都错了?