Condordo con alka per la pignoleria, anzi a volte è meglio essere pignoli , d'altronde confrontarsi dovrebbe aiutare a crescere, quindi ben venga la pignoleria a mio avviso


Ritornando al tema con EF 4 In realtà la cosa è molto semplice, senza andarsi ad ingarbugliare con la reflection.

E' sufficiente in fase di creazione specificare il file ssdl relativo al provider che vuole essere utilizzato. Questo implica il creare il file ssdl relativo al provider che si vuole utilizzare.

Ad esempio per accedere a sql server e mysql 5:

app.config: definizione della stringa di connessione specificando l'ssdl di riferimento

codice:
  <connectionStrings>
  <add name="SqlServer" connectionString="metadata=Northwind.csdl|Northwind.ssdl|Northwind.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=XXXXX\sqlexpress;Initial Catalog=Northwind;Integrated Security=True;&quot;" providerName="System.Data.EntityClient" />

  <add name="MySQL" connectionString="metadata=Northwind.csdl|Northwind.MySql.ssdl|Northwind.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=root;password=*******;persist security info=True;database=northwind&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
-nel file ssdl di MySql ci sarà la definizione dello schema e il relativo provider da usare

codice:
<Schema Namespace="NorthwindModel.Store" Alias="Self" 
        Provider="MySql.Data.MySqlClient" 
        ProviderManifestToken="MySQL5" 
        xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" 
        xmlns="http://schemas.microsoft.com/ado/2006/04/edm/ssdl">

.... SCHEMA ...


A questo punto accedere ai dati diventa pressoche uguale sia per mysql che sql server infatti basterà utilizzare la string connection relativa al dbms che si vuole utilizzare.

codice:
string connectionString = STRINGA DI CONNESSIONE da app.config;

//Get del context del modello specificato nell'edmx
            using (var context = new NorthwindEntities(connectionString))
            {

                   QUERY (linqToEntities)
 ....


}