Edmx bir projedeyken ve başka bir projeden kullanırken bu istisnayı alabilirsiniz.
Bunun nedeni, Res://*/
MEVCUT meclisindeki kaynaklara işaret eden bir uri. Edm, onu kullanan koddan farklı bir derlemede tanımlıysa, kaynak bulunamadığından res: // * / çalışmaz.
'*' Belirtmek yerine, derlemenin tam adını sağlamanız gerekir (genel anahtar belirteci dahil). Örneğin:
res://YourDataAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdefabcedf/YourEdmxFileName.csdl|res://...
Bağlantı dizeleri oluşturmanın daha iyi bir yolu EntityConnectionStringBuilder'dir:
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();
}
Kural dışı durumla karşılaşmaya devam ediyorsanız, montajı reflektörde açın ve .csdl, .ssdl ve .msl dosyalarınızın dosya adlarını kontrol edin. Kaynakların meta veri değerinde belirtilenlerden farklı adları varsa, işe yaramaz.