views:

622

answers:

3

I'm experimenting with the Entity Framework and I want to connect to an Access 2007 database.

The following code is inspired by http://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnection.connectionstring.aspx

I suspect that I've got the wrong end of the stick...

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

The EntityConnectionStringBuilder tells me that it doesn't support the DataSource property. I can connect fine with ADO.net so I know that the path and the provider are correct.

Is this just the complete wrong approach?

+1  A: 

I'm not sure you have either end of the stick. :)

Check out this example instead. There might be other issues with your code, but it looks like you're setting the entity builder's ConnectionString property when you need to be setting its ProviderConnectionString property (among other properties).

It seems to me that for something called a "connection string builder", the ConnectionString property should be read-only (it's not). I guess it's intended to also double as a connection string parser.

Edit: I just looked at your code again, and I think all you have to do is change ConnectionString to ProviderConnectionString. You may have the stick after all!

MusiGenesis
I had already tried that and then it asks for MetaData to be set. I'm not sure how to generate that.
fran
Beats me, too. I'm guessing the metadata for Access is the location of the .mdb file. MSDN really sucks sometimes (this is one of those times). I'm pretty sure the whole thing is auto-generated from code comments, so the more unusual stuff often goes completely unexplained. If I were doing this, I'd skip the whole entity string builder thing.
MusiGenesis
Thanks for the advice!
fran
Shiraz' advice is better. :)
MusiGenesis
+1  A: 

To build your connection string create a file on your desktop called a.udl

Double click on it, should open a UI. Follow the wizard, test the connection.

Then close the UI, open the file with notepad, and you have your connection string.

EDIT It may be that you are getting this error because your are missing a refernce. Entity Framework uses extension methods. Therefore, it might compile but still not work.

Shiraz Bhaiji
I think you need a "voilà" in there somewhere. This is a handy trick.
MusiGenesis
Wow! I didn't know you could generate conenction strings like that. Unfortunately the EntityConnection doesn't support the "Data Source" property. (or am I just being an idiot)
fran
+3  A: 

The approach you are using to build the EF connection string is correct.

BUT...

The Entity Framework only works with Providers (i.e. SqlClient) that support something called provider services.

The OleDB provider doesn't support 'Provider Services' so you can't use EF with the OleDb (unless you can find a third party OleDb provider with support for EF).

Hope this helps

Alex

(Entity Framework Team, Microsoft)

Alex James
Thanks for that. I _was_ just being nuts after all :)
fran