我没有真正找到我正在寻找的东西,我做了一些研究。我正在处理的应用程序是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>
感谢您的帮助。我完全迷失了。
答案 0 :(得分:1)
据我所知,他们使用相同的架构。有一个名为aspnet_SchemaVersions的表,您可以在其中检查模式版本,但我从未见过此表中的记录1。此外,ASP.NET成员资格通过存储过程工作,因此即使他们更改了某些内容,您的SP也会保留旧行为。