2

“asp.net 会员提供程序”是否可移植?我是否必须运行 aspnet_regsql.exe 来为每台新机器设置它?

我将成员资格提供程序数据库导入到 Visual Studio 数据库版并签入我的源代码管理,然后将其重新部署到不同的开发机器上。在新机器上,我收到以下错误。我该如何解决?谢谢!

“System.Web.Security.SqlMembershipProvider”需要与架构版本“1”兼容的数据库架构。但是,当前的数据库架构与此版本不兼容。您可能需要使用 aspnet_regsql.exe(在框架安装目录中提供)安装兼容架构,或者将提供程序升级到更新版本。

4

3 回答 3

3

只要您在新的开发环境中拥有 Framework 2.0 或更高版本并且可以访问包含该模式的数据库,它就是“可移植的”。

aspnet_regsql.exe 应用程序仅用于生成 db 架构。当指定您的提供者时,真正的交易发生在 web.config 中。

只要您在连接字符串或包含成员资格提供程序架构的数据库中有 .mdf 文件引用,一切都应该正常工作。

连接字符串:

<connectionStrings>
        <add name="LocalSQL" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=YourCatalog;Persist Security Info=True;User=sa;Password=password" providerName="System.Data.SqlClient"/>        
    </connectionStrings>

会员提供者:

<membership defaultProvider="DefaultProvider" userIsOnlineTimeWindow="30">
            <providers>
                <clear/>
                <add name="DefaultProvider" connectionStringName="LocalSQL" applicationName="DefaultApp" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="true" passwordFormat="Encrypted" maxInvalidPasswordAttempts="5" passwordAttemptWindow="10" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
            </providers>
        </membership>
于 2009-03-22T04:14:27.213 回答
0

我也有这个问题。对我来说,我必须明确地为我的应用程序命名(在我的开发机器上是“/”)。

网络配置:

<membership>
  <providers>
    <clear />
    <add name="AspNetSqlMembershipProvider" applicationName="jobs"... />
  </providers>
</membership>
<profile>
  <providers>
    <clear />
    <add name="AspNetSqlProfileProvider" applicationName="jobs" ... />
  </providers>
</profile>
<roleManager enabled="true">
  <providers>
    <clear />
    <add connectionStringName="ApplicationServices" applicationName="jobs" ... />
    <add applicationName="jobs" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" />
  </providers>
</roleManager>

然后在我的数据库中:

INSERT INTO [dbo].[aspnet_Applications]([ApplicationName], [LoweredApplicationName], [ApplicationId], [Description]) SELECT N'jobs', N'jobs', N'74b045ce-9c16-4e6a-b1ec-08504600a627', NULL
于 2011-01-18T17:57:54.203 回答
0

每个数据库都需要 SQL 成员资格提供程序。提供者注册过程在数据库中创建某些表。如果这些表不存在,您将收到上述错误。

由于表是在数据库中创建的,因此您可以拥有任意数量的不同应用程序或开发机器来共享单个 SQL 数据库。

但是如果您想要另一个提供程序实例,因为您有不同的应用程序或需要与另一个 SQL 数据库通信,那么您需要再次注册(创建表)。另一种可能性是使用 SQL 复制将表从一个数据库复制到另一个数据库。

很可能您的应用程序需要修改 web.config 文件以确保它具有与现有 SQL 数据库的正确连接字符串。

于 2009-03-22T04:15:37.583 回答