3

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 に「特別な」接続文字列が必要かどうか疑問に思っています。ここここで確認します。しかし、一見すると、それが問題なのかわかりません。

考え?

4

2 に答える 2

0

Sql Server Compact エディションをインストールする必要があります。ここからダウンロードできます。

于 2012-12-19T03:10:09.373 に答える
0

EF では、プロバイダーをインストールする必要があります。DB オプションへの接続の 1 つを使用して確認します。例: エンティティ データ モデルをプロジェクトに追加します。利用可能なプロバイダーだけに。優先接続 Client が表示されますか? ここに画像の説明を入力

コンパクト版はいくつかの制限付きで動作するはずです... http://technet.microsoft.com/en-us/library/cc835494.aspx

それで、「DEFAULT CONNECTION」の問題だと思います Contextコンストラクターを参照してください。代替を渡さない限り、EF はその名前で接続を探します。

<connectionStrings>
    <add name="MyContextName" connectionString="bla";App=EntityFramework"
       providerName="System.Data.SqlServerCe.4.0" />
于 2012-12-19T03:25:13.020 に答える