Using Entity Framework with an SQL Compact Private Installation
- by David Veeneman
I am using Entity Framework 4 in a desktop application with SQL Compact. I want to use a private installation of SQL Compact with my application, so that my installer can install SQL Compact without giving the user a second installation to do. It also avoids versioning hassles down the road.
My development machine has SQL Compact 3.5 SP1 installed as a public installation, so my app runs fine there, as one would expect. But it's not running on my test machine, which does not have SQL Compact installed. I get this error:
The specified store provider cannot be found in the configuration, or is not valid.
I know some people have had difficulty with SQL Compact private installations, but I have used them for a while, and I really like them. Unfortunately, my regular private installation approach isn't working. I have checked the version numbers on my SQL CE files, and they are all 3.8.8078.0, which is the SP2 RC version.
Here are the files I have included in my private installation:
sqlcecompact35.dll
sqlceer35EN.dll
sqlceme35.dll
sqlceqp35.dll
sqlcese35.dll
System.Data.SqlServerCe.dll
System.Data.SqlServerCe.Entity.dll
I have added a reference to System.Data.SqlServerCe to my project, and I have verified that all of the files listed above are being copied to the application folder on the installation machine.
Here is the code I use to configure an EntityConnectionStringBuilder when I open a SQL Compact file:
var sqlCompactConnectionString = string.Format("Data Source={0}", filePath);
// Set Builder properties
builder.Metadata = string.Format("res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", edmName);
builder.Provider = "System.Data.SqlServerCe.3.5";
builder.ProviderConnectionString = sqlCompactConnectionString;
var edmConnectionString = builder.ToString();
Am I missing a file? Am I missing a configuration stepp needed to tell Entity Framework where to find my SQL Compact DLLs? Any other suggestions why EF isn't finding my SQL Compact DLLs on the installation machine? Thanks for your help.