VS 2010 SP1 では、「インターネット」テンプレートから ASP.NET MVC4 プロジェクトを作成しました。次に、SQL Server CE 4.0 の接続文字列を作成しました。
<add name="DefaultConnection"
connectionString="Data Source=|DataDirectory|MyDatabase.sdf;Password=123456"
providerName="System.Data.SqlServerCe" />
Web アプリケーションが cassini で正常にデバッグ起動されたので、「登録」ユーザー オプションを選択します。これにより、すぐにInitializeSimpleMembershipAttribute
フィルターが実行されます。フィルターは、次のコードに到達するとサイトをクラッシュさせます。
Database.SetInitializer<UsersContext>(null);
using (var context = new UsersContext())
{
if (!context.Database.Exists())
{
// Create the SimpleMembership database without Entity Framework migration schema
((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
}
}
//This line never executes. It is meant to configure my custom user table.
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "Users", "ID", "UserName", true);
チェックは次のExists()
状態をスローArgumentException
します。
要求された .Net Framework Data Provider が見つかりません。インストールされていない可能性があります。
ここで、(1) 接続文字列に問題がなく、(2) プロバイダーに問題がないことを確認したかったのです。Exists()
そのために、チェックの前にコードのスニペットを挿入しました。このスニペットは newSqlCeEngine
を使用してデータベースを作成し、Dapper 呼び出しを使用してユーザー テーブルをセットアップしました。Exists()
そのコードは、チェックで再び爆発する直前に、問題なく機能しました。
次に、EF には追加のセットアップ ヘルプが必要かもしれないと考えました。私の EF defaultConnectionFactory を置き換えてみましたweb.config
:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
<parameters>
<parameter value="System.Data.SqlServerCe.4.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
それでも、受け取った例外は変わりませんでした。
SQL Server CE と連携するために EF に「特別な」接続文字列が必要かどうか疑問に思っています。こことここで確認します。しかし、一見すると、それが問題なのかわかりません。
考え?