2011-08-04 17 views
10

私はこれをGoogleにしようとしています。私はSQL Server CE 4.0をインストールし、EF 4.1を持っていますが、適切な接続文字列を取得できません。 の何も私に当てはまりません。Entity FrameworkでSQL Server Compactを使用するための接続文字列?

私はちょうどSqlCeEngineオブジェクトを作成したいと思いますが、何を試しても例外があります。最近では、それはそれの後に、「メタデータ」、「アプリ」、「プロバイダ」、または「プロバイダの接続文字列」のいずれかで接続文字列での不明な接続オプション

れています。私はEFが接続文字列にメタデータを必要とすることを知っています。そして、私は "プロバイダ接続文字列"なしで何ができるか想像できません。

<add name="DBContext" 
    connectionString="metadata=res://*/Data.DBContext.csdl|res://*/Data.DBContext.ssdl|res://*/Data.DBContext.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=MyDbFile.sdf;Persist Security Info=False;&quot;" 
    providerName="System.Data.EntityClient" /> 

それは、メタデータを必要としたりしません:私は、メタデータとそれを持っていた1点で

<add name="DBContext" 
    connectionString="provider connection string=&quot;Data Source=MyDbFile.sdf;Persist Security Info=False;&quot;" 
    providerName="System.Data.EntityClient" /> 

これまでのところ私はこれを持っていますか?接続文字列の "app"部分には何が入りますか?プロバイダは、System.Data.SqlClientまたは一部のSQL Server CEバージョンである必要がありますか? (私は参照を追加しようとするとまだ見つけられません。私の参照の追加ウィンドウにはまだSystem.Data.SqlServerCeバージョン3.5.1.0しか含まれていません)。

providerName属性にはどのような項目がありますか? System.Data.EntityClientは正しいですか?ここには10種類の変数があり、すべての組み合わせが私に新しい不思議なエラーを与えてくれるのですが、Googleで役に立つものは何も見つかりません。私は知恵袋で終わります。これも可能ですか?

答えて

0

This TechNet articleは、SQL Server CompactでEFを使用する手順の概要を示しています。この行は私に飛び出して、あなたの問題を解決することがあります。

は確認しているプロバイダ=接続 文字列でSystem.Data.SqlServerCe.3.5

(私はあなたの代わりに3.5の4.0を望むことを前提としています)

は試してみて、物事が行く方法を見ていることを与えます。

+0

非常にプロバイダのプロパティではまだ未知の接続オプションエラーが表示されます。 – Tesserex

+0

この投稿(http://erikej.blogspot.com/2010/11/using-entity-framework-with-sql-server.html)は、configファイルだけでなくedmxファイルも変更する必要があることを示していますが、また、ほぼ一歳です。私はそれのためのVSのサポートが世話をされていない場合は驚くだろうが、何も話していない... –

6

私はDbContextのコンストラクタにSqlCeConnectionのインスタンスを渡し、それを解決するために、SQL ServerのCompact Editionの持つEntity Frameworkの5.0コードファーストアプローチで同じ問題4.0

で立ち往生したい:

public class Storage : DbContext 
{ 
    public Storage() 
     : base(new SqlCeConnection("Data Source=Database.sdf;Persist Security Info=False;"), 
      contextOwnsConnection: true) 
    { } 

    //... 
} 

インラインの接続文字列を使用したくない場合は、App.configConfigurationManager から入手できます。もちろん、正しいバージョンのSystem.Data.SqlServerCeへの参照を追加する必要がありますタブの[参照の追加]ダイアログで)

0

Lu55のソリューションは私のためには機能しませんでしたが、私はそれを修正するために孤独を発見しました。まだ(生成されたファイルの変更を上書きすることができます)自動コード生成を使用するには、私は次のコードで1つの以上のファイルを追加しました:

using System.Data.Entity; 
using System.Data.Objects; 

namespace MyProject.Data 
{ 
    internal partial class Entities : DbContext 
    { 
     public Entities(string connectionString) 
      : base(
       new ObjectContext(
         @"metadata=res://*/Data.Model.csdl| 
            res://*/Data.Model.ssdl| 
            res://*/Data.Model.msl; 
          provider=System.Data.SqlServerCe.4.0;"), 
       true) 
     { 
      Database.Connection.ConnectionString = connectionString; 
     } 
    } 
} 
13

をあなたのApp.configファイル(EF5コード最初の移行でこれを試みることができますそして、SQL Server CE 4.0):

<connectionStrings> 
    <add name="DefaultConnection" 
     providerName="System.Data.SqlServerCe.4.0" 
     connectionString="Data Source=|DataDirectory|\Data\ProjectDb.sdf"/> 
</connectionStrings> 

そして、あなたProjectDbクラス:

class ProjectDb : DbContext 
{ 
    public ProjectDb() 
     : base("DefaultConnection") 
    { 

    } 
} 

それは魅力のように動作します。

あなたはここでより多くの情報を見つけることができます:http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-2-connections-and-models.aspx

+0

相対パスはどうですか?テストプロジェクトからDBをテストしているとしますか?データベースがどこにあるかを言う代わりに、相対パスを使用するように接続文字列を変更する可能性はありますか? – IbrarMumtaz

+2

Dude、 "| DataDirectory | \ Data \ ProjectDb.sdf"は相対パスです –

0

あなたは少し混入しています。 SQL ServerのCEの接続文字列については

は(おそらくYourNameSpace.DbContextNameDbContextを置き換える)非常に簡単になります

<add name="DbContext" 
    connectionString="MyDbFile.sdf" 
    providerName="System.Data.SqlServerCe.4.0" /> 

私はまた、接続に問題がたくさんあったので、私は次のようでした:

  • installed Entity Framework for SQL Server CE
  • web.configに不変式のプロバイダが含まれていることを確認しましたSystem.Data.SqlServerCe.4.0
  • は4000個のシンボル(==デフォルトでは、制限使用注釈[MaxLength(4000)]を追加するMAX)

メタデータが必要なときよりも長さの最大値またはモードに(DBの列として表される)は、文字列フィールドがないことを確認済みコードファーストの代わりにデータベースファーストモデルを使用するので、データベースの生成モデルを表す.edmxファイルがあります。

関連する問題