0

几年来我一直在玩这个的各种版本:1)membershipprovider 是否处理与 SQL Azure 的瞬时连接失败(或就此而言,任何其他存储提供程序(表、blob 等)?2)为什么存储以前存在的程序没了?出于显而易见的原因,我更喜欢 SP。

4

2 回答 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 回答