几年来我一直在玩这个的各种版本:1)membershipprovider 是否处理与 SQL Azure 的瞬时连接失败(或就此而言,任何其他存储提供程序(表、blob 等)?2)为什么存储以前存在的程序没了?出于显而易见的原因,我更喜欢 SP。
问问题
74 次
2 回答
0
我可以告诉你有关 SP 的信息。DefaultMembershipProvider 现在似乎使用 EF(或者可能......是 ADO.Net)。这是我在System.Web.Providers.DefaultMembershipProvider
课堂上发现的
internal static IQueryable<DbDataRecord> GetAllMembershipUsersLikeUserName(MembershipEntities ctx, string applicationName, string userName, int pageIndex = -1, int pageSize = -1)
{
string queryString = QueryHelper.AppendUserNameSkipLimitIfNeeded("select u.UserName, u.UserId, m.Email, m.PasswordQuestion, m.Comment, m.IsApproved, m.IsLockedOut, m.CreateDate, m.LastLoginDate, u.LastActivityDate, m.LastPasswordChangedDate, m.LastLockoutDate FROM Users as u, Memberships as m, Applications as a WHERE ToLower(a.ApplicationName) = @appName AND a.ApplicationId = m.ApplicationId AND m.UserId = u.UserId AND ToLower(u.UserName) LIKE @userName", pageIndex, pageSize);
return (IQueryable<DbDataRecord>) ctx.CreateQuery<DbDataRecord>(queryString, new ObjectParameter("appName", (object) applicationName.ToLowerInvariant()), new ObjectParameter("userName", (object) userName.ToLowerInvariant()));
}
使用标准 CRUD 查询,我看不到您使用 SP 的意义,因为即使有任何性能差异也不会太大。
我在这里谈论的是通用提供者,这里有一些细节
于 2013-08-29T04:40:55.990 回答
0
事实证明,除了 SP 问题,DefaultMembershipProvider 不支持瞬态故障处理,但有一种方法......
所以问题在这里
有答案:创建一个新的提供者,从默认提供者继承,将其设置为默认提供者,然后就可以了:
public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out System.Web.Security.MembershipCreateStatus status)
{
MembershipCreateStatus tempstatus = 0;
var something = retryPolicy.ExecuteAction(() =>
{
return base.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out tempstatus);
});
status = tempstatus;
return something;
}
于 2014-02-16T22:04:51.800 回答