2

テストプロジェクトでは、SimpleMembershipProviderとEntity Framework 5を使用しています。テストプロジェクトはlocaldbを使用してデータベースを作成し、突然動作を停止しました。何が変わったのかわかりませんが、困惑しています。これはほとんど定型文です。

    private static void InitializeSimpleMembership()
    {
        Database.SetInitializer<TestEfhContext>(null);
        using (var context = new TestEfhContext(ConnectionString))
        {
            if (!context.Database.Exists())
            {
                // Create the SimpleMembership database without Entity Framework migration schema
                ((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
            }

            WebSecurity.InitializeDatabaseConnection(ConnectionString, "Users", "UserID", "UserName", autoCreateTables: true);

        }           
    }

ConnectionStringがapp.configのキーでない場合、その名前のデータベースを作成し、ユーザーモデル用に初期化することになっています。localdbデータベースがまだ存在しない場合は、正常に作成されます。WebSecurity.InitializeDatabaseConnection今失敗する

`Connection string "testdb" was not found.`

トラブルシューティング中に、エイリアスの代わりに実際の接続文字列を使用するように接続文字列を変更してみました。

WebSecurity.InitializeDatabaseConnection(context.Database.Connection.ConnectionString,
   "Users", "UserID", "UserName", autoCreateTables: true);

これは、localdbサーバーへの完全な接続文字列に解決されます。

Data Source=(localdb)\\v11.0;Initial Catalog=testdb;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFrameworkMUE'

私はこれが少なくともうまくいくと思った。そうではありません:

Connection string "Data Source=(localdb)\v11.0;Initial Catalog=testdb;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFrameworkMUE" was not found.

何か案は?これは私がEFを使用した最初のプロジェクトであるため、その一部はまだ私には少し不思議です。テストプロジェクトを最初に設定したときは魔法のように機能し、何が変わったのか理解できません。イニシャライザが実際の接続文字列でも機能しないのは特に奇妙に思えます。実際のアプリケーションは引き続き正常に機能します。テストプロジェクトを機能させることができません。

4

1 に答える 1

4

2つの非常によく似たInitializeDatabaseConnectionメソッドがあり、それが混乱を引き起こしています。

この線:

WebSecurity.InitializeDatabaseConnection(context.Database.Connection.ConnectionString,
   "Users", "UserID", "UserName", autoCreateTables: true);

構成のappSettingsに存在する必要がある接続文字列名を常に期待しています。

独自の接続文字列を具体的に渡すには、InitializaDatabaseConnectionメソッドに6つの引数を渡す必要があります。追加の引数は2番目に来て、プロバイダー名です。

于 2013-01-11T16:12:27.047 に答える