5

私は WPF アプリケーションで EF Code First を使用しようとしています。アイデアは、AppData/MyApp に SqlCe Db を作成し (存在しない場合)、EF Code First で使用することです。

現時点では、作成するはずのデータベースからデータを読み込もうとするとエラーが発生しますが、db コンテキスト オブジェクトを確認すると、SqlExpress で作成しようとしていることがわかりました。

まず、SqlExpress ではなく CE で動作するように設定し、ファイルの場所を設定するにはどうすればよいですか?

app.config で接続文字列を変更しようとしましたが、機能しませんでした (sdf ファイルが作成されませんでした)。また、接続文字列のパスをユーザー フォルダーにあるため、AppData フォルダーに設定する方法もわかりません (修繕)。

以前は SqlCe または EF Code First を使用したことがないため、どんな助けも大歓迎です。

前もって感謝します。

4

4 に答える 4

6

いろいろいじった後、なんとか動作させることができました。私のapp.configには次のものがあります:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
  </configSections>

  <connectionStrings>
    <add name="Database"
         connectionString="Data Source=Database.sdf"
         providerName="System.Data.SqlServerCe.4.0" />
  </connectionStrings>

  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.4.0" />
      <add name="Microsoft SQL Server Compact Data Provider 4.0"
           invariant="System.Data.SqlServerCe.4.0"
           description=".NET Framework Data Provider for Microsoft SQL Server Compact"
           type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
    </DbProviderFactories>
  </system.data>

</configuration>

そこに DbProviderFactory があると、展開に関しても役立ちます。これにより、ユーザーはインストーラーを実行せずに SQLCE 4 を使用できるようになります (ネイティブのバイナリも提供する場合、ここにいくつかの情報があります: http://erikej.blogspot.com/2011/02/using-sql-server-compact- 40-with.html )。

于 2011-03-03T18:04:22.413 に答える
0

ここに考えられる手がかりがあります。NuGetパッケージマネージャーを使用してEFCodeFirst.SqlServerCompactをインストールし、Visual Studio 2010 \ Projects \ MyProject \ packages \ EFCodeFirst.SqlServerCompact.0.8.8482 \ Contentを調べると、次のようなWebアプリの処理が実行されます。

public static class AppStart_SQLCEEntityFramework {
    public static void Start() {
        DbDatabase.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");

        // Sets the default database initialization code for working with Sql Server Compact databases
        // Uncomment this line and replace CONTEXT_NAME with the name of your DbContext if you are 
        // using your DbContext to create and manage your database
        //DbDatabase.SetInitializer(new CreateCeDatabaseIfNotExists<CONTEXT_NAME>());
    }
}
于 2011-03-01T20:30:53.723 に答える
0

ツールが WPF プロジェクトの SQLCE に対応しているとは思えません。それは私も足を止めました。

于 2011-03-02T12:19:57.417 に答える
0

これはおそらく短期的には役に立たないでしょうが、長期的には最善の解決策になると思います. 他の誰かがこれを行う方法を文書化した場所を見つけることができなかったので、SqlCE4、CodeFirst、および NuGet パッケージの作成についてより詳しい知識を持っている人が私を打ち負かさない限り、私が行くにつれてそれを理解する必要があると思いますそれ。必要なのは、SqlCE4 と CodeFirst を WPF や WinForms プロジェクトに追加できる NuGet パッケージです。新しいパッケージにするか、既存のパッケージを十分に処理できるようにするかのいずれかです。

既存のパッケージは、WebActivator に依存しているため、Web プロジェクト向けのようです。私が知る限り、Web 以外のプロジェクトに WebActivator をインストールするのは適切ではありません。NuGet パッケージがプロジェクトの種類を検出し、その情報に基づいてさまざまなインストール ロジックを実行できるかどうかはわかりません。EFCodeFirst.SqlServerCompact パッケージの保守を担当する担当者は、Web 以外のバージョンをリリースするか、既存のバージョンをよりスマートにすることをお勧めします。

それまでの間、暇なときに、それを行う方法を見つけて自分で作成できるかどうかを確認します. NuGet パッケージの作成に関して、私はほとんど完全に理解していないため、どれくらいの時間がかかるかは約束できません。私は本当に基本的なものをいくつか作成しましたが、構成変換などの高度なことは行ったことがありません。

于 2011-03-08T17:05:52.890 に答える