2009-07-15 8 views
5

Ich experimentiere mit dem Entity Framework und möchte eine Verbindung mit einer Access 2007-Datenbank herstellen.Entity Framework mit OleDB-Verbindung - bin ich einfach nur Nüsse?

Der folgende Code wird von http://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnection.connectionstring.aspx inspiriert

Ich vermute, dass ich das falsche Ende des Stockes haben ...

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(); 

Die EntityConnectionStringBuilder mir sagt, dass es nicht die Datasource unterstützt Eigentum. Ich kann gut mit ADO.net verbinden, also weiß ich, dass der Pfad und der Anbieter korrekt sind.

Ist das nur der falsche Ansatz?

Antwort

13

Der Ansatz, den Sie zum Erstellen der EF-Verbindungszeichenfolge verwenden, ist korrekt.

ABER ...

Das Entity Framework funktioniert nur mit Providern (das heißt SqlClient), die so genannte Provider-Dienste unterstützen.

Der OleDB-Anbieter unterstützt "Provider Services" nicht, so dass Sie EF mit dem OleDb nicht verwenden können (außer Sie OleDb-Anbieter eines Fremdanbieters mit EF-Unterstützung finden können).

this helps

Alex

(Entity Framework-Team, Microsoft)

+0

Vielen Dank dafür. Ich war nur verrückt nach allem :) – fran

1

Ich bin mir nicht sicher, ob Sie beide Ende des Sticks haben. :)

Check out this example statt. Möglicherweise gibt es andere Probleme mit Ihrem Code, aber es sieht so aus, als ob Sie die ConnectionString-Eigenschaft des Entitätsgenerators festlegen, wenn Sie die Eigenschaft ProviderConnectionString (neben anderen Eigenschaften) festlegen müssen.

Es scheint mir, dass für eine so genannte "Connection String Builder" die ConnectionString -Eigenschaft schreibgeschützt sein sollte (ist es nicht). Ich denke, es ist auch beabsichtigt, als Verbindungszeichenfolgen-Parser zu verdoppeln.

Edit: Ich habe nur Ihren Code erneut angeschaut, und ich denke, alles, was Sie tun müssen, ist ConnectionString zu ProviderConnectionString ändern. Sie können den Stock schließlich haben!

+0

Ich hatte das schon ausprobiert und dann fragt es nach MetaData gesetzt werden. Ich bin mir nicht sicher, wie ich das erzeugen soll. – fran

+0

Beats mich auch. Ich vermute, die Metadaten für Access ist der Speicherort der MDB-Datei. MSDN ist wirklich manchmal nervig (das ist eine dieser Zeiten). Ich bin mir ziemlich sicher, dass das Ganze automatisch aus Code-Kommentaren generiert wird, so dass die ungewöhnlicheren Sachen oft völlig unerklärt bleiben. Wenn ich dies tun würde, würde ich die gesamte Entity String Builder-Sache überspringen. – MusiGenesis

+0

Danke für den Hinweis! – fran

1

Um Ihre Verbindungszeichenfolge erstellen Sie eine Datei auf Ihrem Desktop a.udl

Klicken Sie doppelt auf sie, sollte eine UI öffnen genannt zu bauen. Folgen Sie dem Assistenten, testen Sie die Verbindung.

Dann schließen Sie die Benutzeroberfläche, öffnen Sie die Datei mit Notepad, und Sie haben Ihre Verbindungszeichenfolge.

BEARBEITEN Es kann sein, dass Sie diesen Fehler erhalten, weil Ihnen eine Referenz fehlt. Entity Framework verwendet Erweiterungsmethoden. Daher könnte es kompilieren, aber immer noch nicht funktionieren.

+1

Ich denke du brauchst irgendwo einen "Voilà". Dies ist ein handlicher Trick. – MusiGenesis

+0

Wow! Ich wusste nicht, Sie conenction Zeichenketten wie diese erzeugen könnte. Leider ist das EntityConnection nicht die „Datenquelle“ Eigenschaft unterstützen. (Oder bin ich nur ein Idiot zu sein) – fran

0

Wahrscheinlich ist OleDb nicht mit EF arbeiten, aber die Initialisierung funktioniert gut, wenn Sie die entityBuilder und die oledbConn auf diese Weise eingestellt .

 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();