【发布时间】:2017-03-09 09:56:20
【问题描述】:
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,当使用不同的展开选项进行两次调用中的第二次时,我会遇到异常。我对设备做了类似的事情,根本不需要设置 MergeOption 并且上下文合并对象没有问题,因此两个扩展集合都显示在实体上。对于用户,如果您尝试相同的操作,ActiveDirectoryClient 会抛出“上下文已经在跟踪具有相同资源 Uri 的不同实体。”在使用设备进行测试时,该问题仅在尝试对 MemberOf 进行扩展时才会出现,可以进行多次调用以扩展其他集合,但是一旦我尝试使用 MemberOf,您就会得到跟踪异常。
【问题讨论】: