使用户成为公司管理员失败并出现错误 - Azure Ad Graph

Making a User A Company Administrator fails with error - Azure Ad Graph

我有一个使用 Azure Graph API 创建用户的方法(用户成功创建),然后尝试将用户添加到公司管理员组,但我收到此错误:

System.InvalidOperationException: The context is already tracking the entity.

Result StackTrace:  
at System.Data.Services.Client.EntityTracker.AddEntityDescriptor(EntityDescriptor descriptor)
   at System.Data.Services.Client.DataServiceContext.AddObject(String entitySetName, Object entity)
   at Microsoft.Azure.ActiveDirectory.GraphClient.DirectoryObjectCollection.AddDirectoryObjectAsync(IDirectoryObject item, Boolean deferredSave)

当我点击这条线时出现错误:

await drrole.Members.AddDirectoryObjectAsync(usr as GraphClient.DirectoryObject);

这里是完整的函数体:

await client.Users.AddUserAsync(graphUser);

var directoryRoles = await client.DirectoryRoles.ExecuteAsync();
var companyAdminRole = directoryRoles.CurrentPage.FirstOrDefault(m => m.DisplayName == "Company Administrator");
if (companyAdminRole != null)
{
    var drrole = client.DirectoryRoles.GetByObjectId(companyAdminRole.ObjectId);
    var usr = await client.Users.GetByObjectId(graphUser.ObjectId).ExecuteAsync();
    await drrole.Members.AddDirectoryObjectAsync(usr as GraphClient.DirectoryObject);
}

我使用的是 2.1.0 版本的 SDK: https://www.nuget.org/packages/Microsoft.Azure.ActiveDirectory.GraphClient/

请尝试以下代码:

 var directoryRoles = activeDirectoryClient.DirectoryRoles.ExecuteAsync();
        var companyAdminRole = directoryRoles.Result.CurrentPage.FirstOrDefault(m => m.DisplayName == "Company Administrator") as DirectoryRole;
        if (companyAdminRole != null)
        {
            var drrole = activeDirectoryClient.DirectoryRoles.GetByObjectId(companyAdminRole.ObjectId);
            var usr = activeDirectoryClient.Users.GetByObjectId(newUser.ObjectId).ExecuteAsync();
            ((DirectoryRole)companyAdminRole).Members.Add(usr.Result as DirectoryObject);
            companyAdminRole.UpdateAsync();
        }

this blog 中所述,您可以使用将用户添加到组的相同结构将用户添加到 DirectoryRole 对象。

我已经写了一个样例并进行了测试,没有遇到你的问题:

希望对您有所帮助。