asp.net 3.5和4.0中的成员资格是否使用相同的数据库模式?

时间:2016-10-17 15:04:30

标签: asp.net asp.net-membership

我没有真正找到我正在寻找的东西,我做了一些研究。我正在处理的应用程序是ASP.NET 3.5 网站。我想将其升级到4.0 网络应用。我知道大多数代码都可以使用。

我主要关心的是会员提供商。 3.5和4.0都使用相同的模式吗?会员表中已有用户。指向我的新4.0应用程序到同一个数据库将工作或我需要先做一些调整?

感谢您的帮助

修改

我在4.0中创建了一个示例 Web应用程序,并使连接字符串指向现有数据库。当我尝试使用现有凭据登录时,收到以下消息:

Your login attempt was not successful. Please try again.

当我检查 SQL Server探查器时,似乎甚至从未对数据库进行调用。

当我在 Page_Load 方法中添加以下行:var user = Membership.GetUser("username");时,我看到以下查询已从分析器执行:

exec sp_executesql N'SELECT 
[Limit1].[UserName] AS [UserName]
FROM ( SELECT TOP (1) 
    [u].[UserName] AS [UserName]
    FROM   [dbo].[Memberships] AS [m]
    INNER JOIN [dbo].[Users] AS [u] ON [m].[UserId] = [u].[UserId]
    INNER JOIN [dbo].[Applications] AS [a] ON [m].[ApplicationId] = [a].[ApplicationId]
    WHERE (((LOWER([a].[ApplicationName])) = (LOWER(@p__linq__0))) OR ((LOWER([a].[ApplicationName]) IS NULL) AND (LOWER(@p__linq__0) IS NULL))) AND (((LOWER([m].[Email])) = (LOWER(@p__linq__1))) OR ((LOWER([m].[Email]) IS NULL) AND (LOWER(@p__linq__1) IS NULL)))
)  AS [Limit1]',N'@p__linq__0 nvarchar(4000),@p__linq__1 nvarchar(4000)',@p__linq__0=N'/',@p__linq__1=N'username'

仍然没有返回任何结果。奇怪的是,我注意到表格的名称并不完全相同:表格没有前缀aspnet_,但查询的耗尽并非抛出甚至在Management Studio上也出现错误。

这是成员资格的配置文件部分:

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" 
         type="System.Web.Providers.DefaultMembershipProvider, 
               System.Web.Providers, Version=2.0.0.0, 
               Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
         connectionStringName="myConnectionString" 
         enablePasswordRetrieval="false" 
         enablePasswordReset="true" 
         requiresQuestionAndAnswer="false" 
         requiresUniqueEmail="false" 
         maxInvalidPasswordAttempts="5" 
         minRequiredPasswordLength="6" 
         minRequiredNonalphanumericCharacters="0" 
         passwordAttemptWindow="10" 
         applicationName="/" />
  </providers>
</membership>

感谢您的帮助。我完全迷失了。

1 个答案:

答案 0 :(得分:1)

据我所知,他们使用相同的架构。有一个名为aspnet_SchemaVersions的表,您可以在其中检查模式版本,但我从未见过此表中的记录1。此外,ASP.NET成员资格通过存储过程工作,因此即使他们更改了某些内容,您的SP也会保留旧行为。