问题如下;我们的代码可以与许多具有相同或相似模型的数据库对话。
代码的结构方式是每个业务项目都只有一个定义了它关心的表的数据上下文(有一千多个)。这意味着我们最终需要根据服务器信息生成连接字符串。
问题变成了 metadata=res:// /DataModel.XXXX.csdl|res:// /DataModel.XXXX.ssdl|res://*/DataModel.XXXX.msl 部分;因为这个名字没有标准化。
有没有办法使用 System.Data.Objects.ObjectContex 结合反射来解决 XXXX。
我们使用的需要我们解决的代码如下。
var scsb = new SqlConnectionStringBuilder();
scsb.DataSource = (string.IsNullOrWhiteSpace(DatabaseServerUri) ? Uri : DatabaseServerUri) + (string.IsNullOrEmpty(SqlInstanceName) ? string.Empty : string.Format(@"\\{0}", SqlInstanceName));
scsb.InitialCatalog = MainDatabase;
scsb.IntegratedSecurity = false;
scsb.Password = "stuff";
scsb.UserID = "morestuff";
scsb.ConnectTimeout = 3600;
var builder = new EntityConnectionStringBuilder();
builder.Metadata = "res://*/DataModel.XXXX.csdl|res://*/DataModel.XXXX.ssdl|res://*/DataModel.XXXX.msl";
builder.Provider = "System.Data.SqlClient";
builder.ProviderConnectionString = scsb.ConnectionString;
return builder.ConnectionString;