2012-03-01 8 views
1

私はVisual Studioソリューションを2つのプロジェクト:MyApp.MvcUIMyApp.Domain(クラスライブラリ)で使用しています。EFはSQL Server CE 3.5のみを選択させます

MyApp.MvcUIには、私のSQL Server CE 4データベースが含まれています。

MyApp.DomainにはEntity Framework EDMXファイルが含まれていますが、そこに追加すると、SQL Server CE 4のみを使用するオプション3.5がありません。私はMvcUIプロジェクトでEDMXを追加する場合

http://www.codetunnel.com/content/images/sqlce35only.jpg

その後、私はSQL ServerのCEを選択することができる午前4

質問私はに私のEntity Frameworkのコンテンツを置くことができますどのように

  1. MyApp.Domainプロジェクトにあり、MyApp.MvcUIプロジェクトに存在するSQL Server CE 4データベースを使用していますか?

  2. 私がこの問題を解決したら、App.Configの接続文字列のデータソース部分はどのように見えますか? MyApp.DomainプロジェクトでApp.Configに似て

    Data Source=|DataDirectory|\CE4DB.sdf 
    

    が、どのような意志を:私は、Webプロジェクトの接続文字列は、単純に次のようになります知っていますか?それはそうならば、人々はソース管理からダウンプロジェクトを取得する場合、相対パスは、そう、それはまだパスの修正なしに動作することを確認する方法があり

    C:\Code\MyProject\MyApp.MvcUI\App_Data\CE4DB.sdf 
    

のような絶対パスになりますか?

答えて

1

私はここで提案を試みました。私のEFはすでに最新版(この記事の時点では4.3)でしたが、SQL Server Compact Framework 4.0をEntity Frameworkで使用できるようにするEntityFramework.SqlServerCompactだけでなく、nugetを使用してSQL Server CEをインストールしました。データベースからEDMXモデルを更新しようとしているときに、ウィザードでCE 4を使用するオプションはまだありません。これがMVCプロジェクトですべて行われた場合、私の質問に描かれたダイアログボックスでCE 4を使用するオプションがあります。

私はうまく動作しました。私はMVCプロジェクトにEDMXを配置するときに生成するような接続文字列を使用しました。

<add name="EntityContainer" 
    connectionString="metadata=res://*/Model1.csdl| 
           res://*/Model1.ssdl| 
           res://*/Model1.msl; 
         provider=System.Data.SqlServerCe.4.0; 
     provider connection string=&quot; 
     Data Source=..\MyApp.MvcUI\App_Data\CE4DB.sdf&quot;" 
    providerName="System.Data.EntityClient" /> 

これで、EFデザイナーはデータベースから読み込むことができました。ボーナスとして、データソースのパスは相対的なものであり、ソース管理からプロジェクトの新しいコピーをプルダウンする他の開発者も、EFデザイナーを調整せずにそのまま使用することができます。私はすぐにコードファーストEFに切り替えるつもりですが、私はこれをEDMXで最初にやってみたいと思っています。それは私が現在どのようにしているか知っているからです。

明らかに、実行時に、MyApp.Domainの接続文字列は、アクティブなプロジェクトの設定ファイルから読み込むため、問題ではありません。この場合は、MvcUIプロジェクト用のWeb.Configです。パスが単純化されているため、接続文字列がさらに簡単になります。

<add name="EntityContainer" 
    connectionString="metadata=res://*/Model1.csdl| 
           res://*/Model1.ssdl| 
           res://*/Model1.msl; 
         provider=System.Data.SqlServerCe.4.0; 
     provider connection string=&quot; 
     Data Source=|DataDirectory|\CE4DB.sdf&quot;" 
     providerName="System.Data.EntityClient" /> 
+0

私は同じ問題を抱えていました。私はapp.configに接続文字列を追加しようとしましたが、EFモデルを追加するときにapp.configファイルから接続文字列を選択できませんでした。だから私はEFモデルを追加し、ローカルのSQLサーバーエクスプレスに新しい接続文字列を作成し、マップするオブジェクトを尋ねられたら、私はnoneを選択しなければなりませんでした。だから私は空のEFモデルを得て、それは私のapp.configに接続文字列を保存しました。次に、app.configの接続文字列を自分のCEデータベースを指すように変更し、EFデザイナを開いてデータベースから更新して、voila! :-) –

3

は、私はあなたがEF 4.1

  • (私は私のために何をしたか)

    1. インストール次の操作を行うために持っていると信じていますインストールするSQL ServerのCE 4.0
  • +0

    ありがとうございます! http://stackoverflow.com/questions/9509022/publishing-asp-net-application-to-the-internet#comment12043101_9509022 –

    +0

    あなたがこれをクラスライブラリで扱えるようにしてもらえますか?私はそれ以上のことをしており、ウィザードは私の質問に描かれていることをまだ示しています。 – Chev

    +0

    CE用4.0ランタイムをインストールしましたか? – tsells

    0
    私はEFをダウンロードするにはNuGetを使用してrecommentでしょう

    、SQL Server CE 4.0、および必要なすべての依存関係を自動的にプロジェクトに追加します。

    これは、これが欠けている場合のために、あなたのアプリの設定で必要なプロバイダも設定します。

    NuGetに慣れていない場合は、ソリューションエクスプローラウィンドウでプロジェクトを右クリックし、[ライブラリリファレンスを追加]を選択してください。 (正確な名前ではないかもしれませんが、見つけやすいです)。

    +0

    私はナゲットを使用しています。私は既にそれを使ってEF 4.3を取得しています。私は彼らがSql Server Compactを持っているかどうかはわかりませんでした。ありがとうございました。しかし、1つの質問、私はドメイン(クラスライブラリ)プロジェクトまたはWebプロジェクトにインストールするのですか? – Chev

    +0

    それは、クラスライブラリに役立たなかったことを追加しているようです。 WebプロジェクトにEDMXを置いたときと同じように、ウィザードではCE 4を選択できません。 1つのプロジェクトではなく、他のプロジェクトで動作します。とても奇妙。 それでも、私はそれを動作させました。私は答えとして投稿します。 – Chev

    3

    4.0 EDMXウィザードは、気付いたようにWebプロジェクトでのみ機能します。 SQL Server Compact Toolboxアドインを使用して任意のプロジェクトタイプで4.0 EDMXを作成して使用できます。