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 で構成されたメンバーシップ プロバイダーを使用しません。それは絶対に何もしません。

次に、SimpleMembership は Filters\InitializeSimpleMembershipAttribute.cs ファイルで構成され、次の行があります。

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

最初のパラメーターは、使用する接続文字列を SimpleMembership に指示します。これは DefaultConnection と呼ばれます。DefaultConnection は machine.config で定義されたフォールバック接続であり、この接続はデフォルトで、attachdbfilename 属性を持つ localdb を使用します。

上記の行を代わりに MySQLConnection に変更し、作成した MembershipProvider を削除する必要があります。

次は、UsersContext がデフォルトの接続文字列でも定義されていることです。それも変えてください。

于 2012-10-11T22:58:09.040 に答える