问题如下;我们的代码可以与许多具有相同或相似模型的数据库进行通信。
代码的结构化方式是每个业务项目都只有一个数据上下文,它关注的是表(它有超过一千个)。这意味着我们最终需要根据服务器信息生成连接字符串。
问题变成了元数据= 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;
答案 0 :(得分:0)
将我的评论扩展到答案
模型和映射文件通常嵌入在程序集中(ObjectContext所在的位置),因此您可以提供该程序集名称以从程序集的嵌入资源中读取它们。为此,您可以执行以下操作:
builder.Metadata = string.Format("res://{0}", typeof(MyObjectContext).Assembly.FullName);