ASP.NET SQL概要文件提供程序-ProfileBase.Create()方法是否命中DB?
我正在使用SQLMemebershipProvider并使用概要文件。我有一个名为UserProfile的自定义类,它继承自ProfileBase类,并使用它设置自定义属性,如“FullName”。我想循环数据库中的所有用户并访问他们的配置文件属性。在每次迭代中,我都调用ProfileBase.Create()来获取一个新的概要文件,然后访问属性 在我看来,每次调用ProfileBase.Create()时,它都会访问我的SQL数据库。但我只是想确认一下。那么,有人知道这是否真的每次都会击中数据库吗 更好的是,有没有人有更好的解决方案来解决我如何通过一次调用DB来获取所有用户的自定义配置文件属性ASP.NET SQL概要文件提供程序-ProfileBase.Create()方法是否命中DB?,asp.net,sql,membership,profile,provider,Asp.net,Sql,Membership,Profile,Provider,我正在使用SQLMemebershipProvider并使用概要文件。我有一个名为UserProfile的自定义类,它继承自ProfileBase类,并使用它设置自定义属性,如“FullName”。我想循环数据库中的所有用户并访问他们的配置文件属性。在每次迭代中,我都调用ProfileBase.Create()来获取一个新的概要文件,然后访问属性 在我看来,每次调用ProfileBase.Create()时,它都会访问我的SQL数据库。但我只是想确认一下。那么,有人知道这是否真的每次都会击中数据
我知道我可以编写自己的存储过程,但我想知道是否有一种内置于成员资格提供程序中的方法。在调用以下命令之前,您不会一直保存到数据库: Save方法写入已修改的内容 将配置文件属性值添加到数据 来源。配置文件提供程序可以 减少现场的活动量 仅通过执行更新来获取数据源 当IsDirty属性设置为 对。默认情况就是这样 SqlProfileProvider
迈克,我相信你所观察到的是真的。我正在使用一个ProfileProvider,它使用Azure表存储作为数据存储。我想从数据库中获取一个用户配置文件列表,并将它们与来自成员资格提供者的信息合并。 我花了一些时间才意识到,以用户名作为参数调用ProfileBase.Create()会对表存储执行查找,并实际检索与该用户名关联的数据。就我而言,调用这个方法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;
}
public IEnumerable,但在我看来,这仅通过生成代理类为自定义配置文件属性提供设计时智能感知。我不调用Save方法。我只是试图检索配置文件及其自定义属性。顺便说一句,如果您将AutoSave设置为true,那么您的配置文件将自动更新感谢您的澄清。非常感谢。