2011-01-22 4 views
5

私はWPFアプリケーションでEFコードファーストを使用しようとしていますが、AppData/MyApp(存在しない場合)にSqlCe Dbを作成し、EFコードファースト。WPFでEFコードファーストとSqlCeを使用

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

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

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

以前はSqlCeやEF Code Firstで扱ったことがありませんでしたので、何か助けを歓迎します。&

ありがとうございます。

答えて

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)。

+0

私は以前これを追いかけていませんでしたので、あなたの解決策はテストしていませんが、誰も何も出てこなかったので、すでに2票を獲得しています。ありがとう、私はどこかに解決策をメモし、おそらく将来それを使用します! – Tiax

+0

Code Firstでは、あなたのdevシステムで動作するようにプログラムを設定した後、app.configに本当に必要なのは 'DbProviderFactories'タグエントリを追加することだけです。コードファーストは、必要な接続文字列をすべてあなたのために行います。 また、Program Files [x86]フォルダのSQLCE DLLがプログラムと一緒に配布されるようにする必要があります。 –

0

ここにはヒントがあります。 Visual Studio 2010 \ Projects \ MyProject \ packages \ EFCodeFirst.SqlServerCompact.0.8.8482 \ ContentのNuGet Package Managerを使用してEFCodeFirst.SqlServerCompactをインストールする場合は、次のような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>()); 
    } 
} 
0

ツールがSQLCE for WPFプロジェクトの準備ができていないと思います。それはあまりにも私のトラックで私を止めた。

0

これはおそらく短期間に役立つものではありませんが、長期的には最良の解決策になると思います。 SqlCE4、CodeFirst、NuGetパッケージを作成することについてもっと親密な知識を持っていない人が私を傷つけない限り、私はそれを理解しなければならないだろうと思うので、他の誰かがこれを行う方法を文書化しているところを見つけることができませんでした。それ。私たちが必要とするのは、新しいパッケージであるNuGetパッケージ、または既存のものを処理するのに十分スマートなものにして、SqlCE4とCodeFirstをWPFやWinFormsプロジェクトに追加することができるパッケージです。

WebActivatorに依存しているため、既存のパッケージはWebプロジェクトに適しているようです。私が言うことから、Web以外のプロジェクトにWebActivatorをインストールすることは本当に適切ではありません。 NuGetパッケージがプロジェクトタイプを検出し、その情報に基づいて異なるインストールロジックを実行できるかどうかはわかりません。 EFCodeFirst.SqlServerCompactパッケージをメンテナンスして、Web以外のバージョンをリリースしたり、既存のものをよりスマートにしたりする責任を負っている人にとっては、より良いことです。

私の暇な時間に、私はそれをやり遂げる方法を見つけ出して、自分自身を作り出すことができるかどうかを確かめるつもりです。 NuGetパッケージを作ることに関しては、私が暗闇の中にいるので、私がどれくらい時間を取ってくれるか約束することはできません。私は本当に基本的なものをいくつか作成しましたが、config変換などのような高度な処理は一度も行っていません。

+0

バージョン1.3以降のWebActivatorは、「非ウェブ」シナリオをサポートしています。手動でアクションを実行することができます(ユニットテストで役立ちます)。 –

関連する問題