2011-09-17 8 views
3

私はEntityフレームワークについて少し混乱しています。私はコードファーストアプローチを使用したいと思います。私のデータベーステーブルがクラス定義によってどのように構成されているかを書いてみたいと思います。エンティティフレームワークをコードファーストアプローチで使用すると、指定されたパスにデータベース(SQL Server Compact)を作成できますか?

主な問題は、データベースを作成する(または開く)必要があるということです。これは、パスを選択することでユーザーがデータベースを開くことができ、新しいデータベースを作成することができます。私はこれを達成するためにコンパイルされたSQL Serverを選択しましたが、私はまだデータベースをコードファーストのアプローチで作成する場所を選択する方法を理解していないため、このような状況のためにコードの最初のアプローチを使用する方法を理解していません可能。

誰かが私が間違っていることを説明でき、別のルートがあればそれを提案できますか?ありがとう

答えて

8

私はちょうど数日前に同じ問題を抱えていました。ここで私はそれが動作するようになった方法は次のとおりです。アプリケーションのスタートアップコードで

は、次の行を追加します。CreateDatabaseIfNotExistsではない場合

using System.Data.Entity.Database; 

public class MyDbInitializer : CreateDatabaseIfNotExists<MyDbContext> 
{ 
    protected override void Seed(MyDbContext context) 
    { 
     // create some sample data 
    } 
} 

using System.Data.Entity.Database; 

// ... 

DbDatabase.SetInitializer(new MyDbInitializer()); 
DbDatabase.DefaultConnectionFactory = new SqlCeConnectionFactory(
    "System.Data.SqlServerCe.4.0", 
    @"C:\Path\To\", 
    @"Data Source=C:\Path\To\DbFile.sdf"); 

ザ・初期化子は次のようになります必要なもの、もっと多くの種類のイニシャライザがあります。また、独自のものを作成することもできます。そのに関する詳しい情報はここで見つけることができます:

http://blog.oneunicorn.com/2011/03/31/configuring-database-initializers-in-a-config-file/

は、この情報がお役に立てば幸いです。

+0

私はテストしていますが、Visual Studio SP1のインストールを待つ必要があります。私はそれが問題の一部だと思う(私は本当に**ウェブを介して多くの**を掘り起こしている、それは私がSP1の欠如のために多くのものを逃しているように見える) –

+0

あなたが示唆するものでは、 SqlCeConnectionFactoryで指定されたパス上にデータベースを生成しません。残念ながらそれが必要です。コードを使用している間にパスを指定する必要があります。Argh –

+1

DropCreateDatabaseAlwaysこれを試してください! (それは私のためにこのようにします) – LueTm

関連する問題