Je suis en train d'écrire du code qui me permet de basculer entre les SQLCE (en local sur ma machine de dev) et complète de SQL (sur AppHarbor). Avec SQL CE, la chaîne de connexion, tout est géré pour moi, mais j'ai de la construire moi-même pour SQL. Mon code pour l'instant est au-dessous, mais il donne cette erreur:
Mot-clé non pris en charge: "métadonnées"
J'ai été à la recherche en ligne pendant des heures, mais toutes les solutions nécessitent l'utilisation d'une "ContextBuilder" de la classe dont je ne trouve pas (j'ai installé EF via le package NuGet).
Voici le code actuel (exécuter au démarrage via WebActivator):
public static void Start()
{
// Read the details from AppSettings. Locally, these will be empty.
var databaseHost = ConfigurationManager.AppSettings["DatabaseHost"];
var databaseName = ConfigurationManager.AppSettings["DatabaseName"];
var databaseUsername = ConfigurationManager.AppSettings["DatabaseUsername"];
var databasePassword = ConfigurationManager.AppSettings["DatabasePassword"];
// Check whether we have actual SQL Server settings.
if (!string.IsNullOrWhiteSpace(databaseHost) && !string.IsNullOrWhiteSpace(databaseName))
{
// Set up connection string for a real live database :-O
var connectionString = string.Format("metadata=res://*/DB.csdl|res://*/DB.ssdl|res://*/DB.msl;"
+ "provider=System.Data.SqlClient; provider connection string='Data Source={0};"
+ "Initial Catalog={1};User ID={2}; Password={3};MultipleActiveResultSets=True'",
databaseHost, databaseName, databaseUsername, databasePassword);
Database.DefaultConnectionFactory = new SqlConnectionFactory(connectionString);
}
else
{
// Set a custom database initializer for setting up dev database test data.
Database.SetInitializer<BlogDataContext>(new BlogDataIntializer());
// Set the connection factory for SQL Compact Edition.
Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
}
}