迈克,我相信您的观察是正确的。我正在使用将Azure
TableStorage用作数据存储的ProfileProvider。我想从数据库中获取用户配置文件列表,并将其与成员资格提供者的信息合并。我花了一段时间才意识到,以用户名作为参数调用Profilebase.Create()会对TableStorage进行查找,并实际上
检索 与该用户名关联的数据。就我而言,调用此方法 Create() 会产生误导,我期望 Load() 或 Get()
。目前,我的代码如下所示:
public IEnumerable<AggregatedUser> GetAllAggregatedUsers() { ProfileInfoCollection allProfiles = this.GetAllUsersCore( ProfileManager.GetAllProfiles(ProfileAuthenticationOption.All) ); //AggregatedUser is simply a custom Class that holds all the properties (Email, FirstName) that are being used var allUsers = new List<AggregatedUser>(); AggregatedUser currentUser = null; MembershipUser currentMember = null; foreach (ProfileInfo profile in allProfiles) { currentUser = null; // Fetch profile information from profile store Profilebase webProfile = Profilebase.Create(profile.UserName); // Fetch core information from membership store currentMember = Membership.FindUsersByName(profile.UserName)[profile.UserName]; if (currentMember == null) continue; currentUser = new AggregatedUser(); currentUser.Email = currentMember.Email; currentUser.FirstName = GetStringValue(webProfile, "FirstName"); currentUser.LastName = GetStringValue(webProfile, "LastName"); currentUser.Roles = Roles.GetRolesForUser(profile.UserName); currentUser.Username = profile.UserName; allUsers.Add(currentUser); } return allUsers; } private String GetStringValue(Profilebase profile, String valueName) { if (profile == null) return String.Empty; var propValue = profile.PropertyValues[valueName]; if (propValue == null) return String.Empty; return propValue.PropertyValue as String; }
有没有更好的方法(更直接,更高效)
- 从配置文件提供者检索所有自定义配置文件信息,并
- 将它们与成员资格提供程序信息合并以在例如管理员页面中显示它们?
我看过Web Profile
Builder,但是IMO仅通过生成代理类为自定义配置文件属性提供设计时的智能感知。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)