Vous pouvez obtenir cette exception lorsque l'Edmx se trouve dans un projet et que vous l'utilisez à partir d'un autre.
La raison en est que Res://*/
est un uri qui pointe vers les ressources de l'assemblage CURRENT. Si l'Edm est défini dans un assemblage différent de celui du code qui l'utilise, res://*/ ne fonctionnera pas car la ressource est introuvable.
Au lieu de spécifier '*', vous devez fournir le nom complet de l'assemblage (y compris le jeton de clé publique). Par exemple
res://YourDataAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdefabcedf/YourEdmxFileName.csdl|res://...
Une meilleure façon de construire des chaînes de connexion est d'utiliser EntityConnectionStringBuilder :
public static string GetSqlCeConnectionString(string fileName)
{
var csBuilder = new EntityConnectionStringBuilder();
csBuilder.Provider = "System.Data.SqlServerCe.3.5";
csBuilder.ProviderConnectionString = string.Format("Data Source={0};", fileName);
csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl",
typeof(YourObjectContextType).Assembly.FullName);
return csBuilder.ToString();
}
public static string GetSqlConnectionString(string serverName, string databaseName)
{
SqlConnectionStringBuilder providerCs = new SqlConnectionStringBuilder();
providerCs.DataSource = serverName;
providerCs.InitialCatalog = databaseName;
providerCs.IntegratedSecurity = true;
var csBuilder = new EntityConnectionStringBuilder();
csBuilder.Provider = "System.Data.SqlClient";
csBuilder.ProviderConnectionString = providerCs.ToString();
csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl",
typeof(YourObjectContextType).Assembly.FullName);
return csBuilder.ToString();
}
Si vous rencontrez toujours l'exception, ouvrez l'assemblage dans Reflector et vérifiez les noms de vos fichiers .csdl, .ssdl et .msl. Si les ressources ont des noms différents de ceux spécifiés dans la valeur des métadonnées, cela ne fonctionnera pas.
16 votes
Si une question sur un produit spécifique a été vue plus de 200 000 fois, cela signifie que le produit ne fonctionne pas comme les utilisateurs l'attendent. J'aimerais que Microsoft s'attaque à ce problème. Voici un lien pour leur faire des suggestions si vous avez le temps : visualstudio.uservoice.com/forums/121579-visual-studio .
1 votes
Mon problème a été résolu en remplaçant la chaîne de connexion copiée du projet db-layer.
0 votes
Je suis également confronté à ce problème, j'ai juste nettoyé et reconstruit la solution qui fonctionne bien.
1 votes
Le Marquis de Sade est vivant et bien portant, et travaille chez Microsoft. C'est vraiment l'enfer d'Entity Framework.