2009-07-15 12 views
5

Sto sperimentando con Entity Framework e desidero connettermi a un database Access 2007.Entity Framework con connessione OleDB: sono semplicemente pazzo?

Il seguente codice si ispira http://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnection.connectionstring.aspx

Ho il sospetto che ho avuto la parte sbagliata del bastone ...

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

L'EntityConnectionStringBuilder mi dice che non supporta il DataSource proprietà. Posso collegarmi bene con ADO.net quindi so che il percorso e il provider sono corretti.

Questo è solo l'approccio completamente sbagliato?

risposta

13

L'approccio utilizzato per costruire la stringa di connessione EF è corretto.

MA ...

Entity Framework funziona solo con i fornitori (cioè SqlClient) che supportano qualcosa chiamato Servizi di provider.

Il provider OleDB non supporta "Servizi provider", quindi non è possibile utilizzare EF con OleDb (a meno che non sia possibile trovare un provider OleDb di terze parti con supporto per EF).

Spero che questo aiuti

Alex

(Entity Framework Team, Microsoft)

+0

Grazie per quello. Io ero solo matto dopo tutto :) – fran

1

Non sono sicuro che abbiate entrambe le estremità del bastone. :)

Check out this example invece. Potrebbero esserci altri problemi con il tuo codice, ma sembra che tu stia impostando la proprietà ConnectionString del generatore di entità quando devi impostare la sua proprietà ProviderConnectionString (tra le altre proprietà).

Mi sembra che per qualcosa chiamato "generatore di stringhe di connessione", la proprietà ConnectionString debba essere di sola lettura (non lo è). Suppongo che sia destinato a raddoppiare anche come un parser di stringhe di connessione.

Modifica: ho appena rivisto il tuo codice e penso che tutto ciò che devi fare è cambiare ConnectionString in ProviderConnectionString. Dopo tutto, potresti avere il bastone!

+0

L'avevo già provato e quindi è necessario impostare MetaData. Non sono sicuro di come farlo. – fran

+0

Beats me, anche. Sto indovinando che i metadati per Access sono la posizione del file .mdb. MSDN fa davvero schifo a volte (questa è una di quelle volte). Sono abbastanza sicuro che l'intera cosa sia generata automaticamente dai commenti del codice, quindi le cose più insolite spesso diventano completamente inspiegabili. Se lo facessi, salterò l'intera entità costruttore di stringhe di entità. – MusiGenesis

+0

Grazie per il consiglio! – fran

1

di costruire la vostra stringa di connessione creare un file sul desktop denominata a.udl

doppio click su di esso, dovrebbe aprire un'interfaccia utente. Seguire la procedura guidata, testare la connessione.

Quindi chiudere l'interfaccia utente, aprire il file con il blocco note e disporre della stringa di connessione.

EDIT È possibile che si stia verificando questo errore perché manca un refernce. Entity Framework utilizza metodi di estensione. Pertanto, potrebbe compilare ma non funzionare ancora.

+1

Penso che tu abbia bisogno di un "voilà" lì da qualche parte. Questo è un trucco pratico. – MusiGenesis

+0

Wow! Non sapevo che potessi generare stringhe simili. Sfortunatamente EntityConnection non supporta la proprietà "Data Source". (o sono solo un idiota) – fran

0

Probabilmente OleDb non funziona con EF, ma l'inizializzazione funziona bene se si imposta l'entityBuilder e l'oledbConn in questo modo .

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