2009-07-15 36 views
5

私はEntity Frameworkを実験しており、Access 2007データベースに接続したいと考えています。次のコードは、http://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnection.connectionstring.aspxOleDB接続のEntity Framework - 私は単なるナットですか?

に触発され

私はスティックの間違った終わりを持っていると思われる...

OleDbConnectionStringBuilder oledbConn = new OleDbConnectionStringBuilder(); 

oledbConn.DataSource = @"..\..\..\..\Pruebas.accdb"; //yep Access 2007! 

EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(); 
entityBuilder.Provider = "Microsoft.ACE.OLEDB.12.0"; 
entityBuilder.ConnectionString = oledbConn.ToString(); 
EntityConnection ec = new EntityConnection(entityBuilder.ToString()); 
ec.Open(); 
ec.Close(); 

EntityConnectionStringBuilderは、それがデータソースをサポートしていないことを私に伝えますプロパティ。 ADO.netと正常に接続できるので、パスとプロバイダが正しいことがわかります。

これはまったく間違ったアプローチですか?

答えて

13

EF接続文字列を作成するために使用しているアプローチは正しいです。

しかし...

Entity Frameworkのが唯一のプロバイダサービスと呼ばれるものをサポートするプロバイダ(すなわちのSqlClient)で動作します。

OleDBプロバイダは「プロバイダーサービス」をサポートしていないため、OleDbでEFを使用することはできません(EFをサポートするサードパーティのOleDbプロバイダーが見つからない場合)。

希望これは

アレックス

(Entity Frameworkのチーム、マイクロソフト)

+0

ありがとう。結局のところ私はナッツであるだけだった。 – fran

1

スティックのどちらかの端があるかどうかわかりません。 :)

代わりにthis exampleをご覧ください。あなたのコードには他の問題があるかもしれませんが、ProviderConnectionStringプロパティ(他のプロパティの中でも)を設定する必要があるときに、エンティティビルダのConnectionStringプロパティを設定しているようです。

"接続文字列ビルダー"と呼ばれるものの場合、ConnectionStringプロパティは読み取り専用でなければなりません(そうではありません)。私は、接続文字列パーサとしても機能することを意図していると思います。

編集:あなたのコードをもう一度見てみました。あなたはConnectionStringをProviderConnectionStringに変更するだけです。あなたは結局、棒を持っているかもしれません! UIを開く必要があり、それに

ダブルクリックしa.udlと呼ばれるデスクトップ上のファイルを作成し、あなたの接続文字列を構築するには

+0

私はすでにそれを試みてから、MetaDataの設定を要求していました。私はどのようにそれを生成するか分からない。 – fran

+0

私も勝つ。私は、Accessのメタデータが.mdbファイルの場所であると推測しています。 MSDNは本当に時々嫌です(これはその時の1つです)。私は、コードのコメントからすべてが自動生成されていると確信しています。そのため、より珍しいものはしばしば完全に説明できません。私がこれをやっていたら、エンティティストリングビルダー全体をスキップします。 – MusiGenesis

+0

アドバイスをいただきありがとうございます! – fran

1

。ウィザードに従って、接続をテストします。

その後、UIを閉じて、メモ帳でファイルを開き、接続文字列を取得します。

EDITあなたは参照がないため、このエラーが発生している可能性があります。 Entity Frameworkは拡張メソッドを使用します。したがって、コンパイルできますが、まだ動作しません。

+1

あなたはどこかで "voilà"が必要だと思います。これは便利なトリックです。 – MusiGenesis

+0

うわー!私はあなたがそれのような議会の弦を生み出すことができるのか分かりませんでした。残念ながら、EntityConnectionは "データソース"プロパティをサポートしていません。 (または私はちょうどばかだ) – fran

0

おそらくOLEDBはEFでは動作しませんが、あなたがこの方法でentityBuilderとoledbConnを設定した場合、初期化が正常に動作できます。

 OleDbConnectionStringBuilder oledbConn = new OleDbConnectionStringBuilder(); 
     oledbConn.Provider = "Microsoft.Jet.OLEDB.4.0"; 
     oledbConn.DataSource = @"C:\Users\Utente\Documents\visual studio 2013\Projects\How to implement the1\Debug\Test.mdb"; 

     EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(); 
     entityBuilder.Provider = "System.Data.EntityClient"; 
     string connectionString = string.Format("metadata=res://*/School.csdl|res://*/School.ssdl|res://*/School.msl;provider=System.Data.OleDb;provider connection string='{0}'", oledbConn); 
     entityBuilder.ConnectionString = connectionString; 
     EntityConnection ec = new EntityConnection(entityBuilder.ToString()); 
     ec.Open(); 
     ec.Close(); 
関連する問題