คุณสามารถรับข้อยกเว้นนี้ได้เมื่อ Edmx อยู่ในโครงการหนึ่งและคุณใช้งานจากโครงการอื่น
เหตุผลคือRes://*/
uri ซึ่งชี้ไปที่ทรัพยากรในแอสเซมบลีปัจจุบัน หากมีการกำหนด Edm ในแอสเซมบลีที่แตกต่างจากรหัสที่ใช้อยู่ res: // * / จะไม่ทำงานเนื่องจากไม่พบทรัพยากร
แทนที่จะระบุ '*' คุณจะต้องระบุชื่อเต็มของชุดประกอบแทน (รวมถึงโทเค็นกุญแจสาธารณะ) เช่น:
res://YourDataAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdefabcedf/YourEdmxFileName.csdl|res://...
วิธีที่ดีกว่าในการสร้างสตริงการเชื่อมต่อกับ 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();
}
หากคุณยังคงพบข้อยกเว้นให้เปิดชุดประกอบในตัวสะท้อนสัญญาณและตรวจสอบชื่อไฟล์สำหรับไฟล์. csdl, .ssdl และ. msl เมื่อทรัพยากรมีชื่อแตกต่างกันไปตามที่ระบุในค่าเมทาดาทามันจะไม่ทำงาน