0

所以。

起初,我将连接字符串添加到远程服务器 MSSQL Server 2008 R2, 10.50.1600:

<add name="MySQLConnection" connectionString="server=xxx.x.xx.xx;initial catalog=xxxxx;user id=sa;password=xxxxxxxxxxx;"/>

然后,我在服务器端的 .NET 4.0 中使用 aspnet_regsql 配置了该远程数据库,并添加了自定义成员资格(因为 inbuild 不想使用 WSAT)。

<membership
  defaultProvider="SqlProvider"
  userIsOnlineTimeWindow="20">
  <providers>
    <clear />
    <add name="SqlProvider"
        type="System.Web.Security.SqlMembershipProvider"
        connectionStringName="MySQLConnection"
        enablePasswordRetrieval="false"
        enablePasswordReset="true"
        requiresQuestionAndAnswer="true"
        passwordFormat="Hashed"
        applicationName="/" />
  </providers>
</membership>

所以,现在我可以使用 WSAT 配置我的应用程序,但无法在登录或注册页面上输入,出现错误:

System.ArgumentException: Invalid value for key 'attachdbfilename'.

Line 32:                     using (var context = new UsersContext())
Line 33:                     {
Line 34:                         if (!context.Database.Exists())
Line 35:                         {
Line 36:                             // Create the SimpleMembership database without Entity Framework migration schema

解决了:

问题出在这里:

public class UsersContext : DbContext
{
    public UsersContext()
        : base("DefaultConnection")
    {
    }

    public DbSet<UserProfile> UserProfiles { get; set; }
}

我不需要自定义成员资格等 - 只需为我的连接字符串设置当前 DefaultConnection 名称,或在此处更改为 MySQLConnectionString。

4

1 回答 1

0

attachdbfilename 对远程数据库无效。它说您的连接名称是 MySQLConnection,但在您的成员资格中,您指定了一个连接字符串“dbSkazkiEntities”。

是否有多个连接字符串?

编辑:

哇。好吧,你有很多事情搞砸了。首先,您使用的是 SimpleMembership。SimpleMembership 不使用在您的 Web.Config 中配置的成员资格提供程序。它完全没有任何作用。

其次,在 Filters\InitializeSimpleMembershipAttribute.cs 文件中配置了 SimpleMembership,其中有一行说:

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", 
    "UserName", autoCreateTables: true);

第一个参数告诉 SimpleMembership 使用哪个连接字符串,它被称为 DefaultConnection。DefaultConnection 是在 machine.config 中定义的备用连接,该连接默认使用 localdb,它具有 attachdbfilename 属性。

您需要将上面的行改为您的 MySQLConnection,并删除您创建的 MembershipProvider。

接下来是 UsersContext 也使用默认连接字符串定义。也改变它。

于 2012-10-11T22:58:09.040 回答