MemberOf展开不填充集合

时间:2017-03-07 23:49:34

标签: c# azure-active-directory

var client = ActiveDirectoryClientFactory.GetActiveDirectoryClient(_connector);
client.Context.MergeOption = MergeOption.AppendOnly;
_withOwnedDevices = await client.Users.Expand(d => d.OwnedDevices).ExecuteAsync();
_withMemberOf = await client.Users.Expand(d => d.MemberOf).ExecuteAsync();

运行上面的代码时,我确实得到了OwnedDevices,但是MemberOf一直都是空的。

var client = ActiveDirectoryClientFactory.GetActiveDirectoryClient(_connector);
_withOwners = await client.Devices.Expand(d => d.RegisteredOwners).ExecuteAsync();
_withUsers = await client.Devices.Expand(d => d.RegisteredUsers).ExecuteAsync();
_withMemberOf = await client.Devices.Expand(d => d.MemberOf).ExecuteAsync();

熟悉上面的网络RegisteredOwners和RegisteredUsers,但在MemberOf集合上没有任何内容。

var client = ActiveDirectoryClientFactory.GetActiveDirectoryClient(_connector);
var matches = await client.Users.Where(u => u.Mail == email).Expand(u => u.MemberOf).ExecuteAsync();

这将匹配一个匹配列表,一个,并且MemberOf集合具有结果。在所有情况下查询相同的Active Directory。

问题似乎与特殊MergeOption的需求有关。没有AppendOnly或NoTracking我在使用不同的Expand选项进行两次调用中的第二次时会遇到异常。我对设备执行类似操作,并且根本不需要设置MergeOption,并且上下文合并对象没有问题,因此两个扩展集合都显示在实体上。在用户的情况下,如果您尝试相同的事情,ActiveDirectoryClient会抛出一个"上下文已经在跟踪具有相同资源Uri的不同实体。"在使用设备进行测试时,只有在尝试对MemberOf进行扩展时才会出现问题,可以进行多次调用以扩展其他集合,但是一旦我尝试使用MemberOf,您就会获得跟踪异常。

1 个答案:

答案 0 :(得分:0)

我测试了以下代码:

            ActiveDirectoryClient client = AuthenticationHelper.GetActiveDirectoryClient();

            client.Context.MergeOption = MergeOption.AppendOnly;
            var _withMemberOf = await client.Users.Expand(d => d.MemberOf).ExecuteAsync();

上面的代码将返回用户的页面集合。当前页面中的最大用户数为100.每个用户都有一个MemberOf属性,显示用户的组和角色成员资格.Blow是在vs中调试时的屏幕截图: enter image description here

请检查用户是否通过以下方式成功获得了MemberOf:

var client = ActiveDirectoryClientFactory.GetActiveDirectoryClient(_connector);
var matches = await client.Users.Where(u => u.Mail == email).Expand(u => u.MemberOf).ExecuteAsync();

包含在CurrentPage集合中,您可以使用下面的代码来获取用户的下一页集合来检查:

            client.Context.MergeOption = MergeOption.AppendOnly;
            IPagedCollection<IUser> pagedCollection = await client.Users.Expand(d => d.MemberOf).ExecuteAsync();
            if (pagedCollection != null)
            {
                do
                {

                    //loop the users and get the memberof information

                    pagedCollection = await pagedCollection.GetNextPageAsync();
                } while (pagedCollection != null);

            }