在解决方案中,我有两个DAL。每个访问不同的服务器。
第一个服务器/数据库包含一个将提供数据库名称的表。
var db = "db_1"; // can be db_1, db_2, db_3, etc.
第二台服务器包含许多数据库 - 每个数据库都包含需要查询的相同表。
我需要能够根据db值动态切换上下文。我希望能够将db var传递给返回/使用正确Context的业务层。
答案 0 :(得分:0)
您可以为此创建两个模型。一个用于您的数据库,其中包含提供数据库名称的表,另一个用于其他数据库。
如果使用db first方法,则将使用默认连接字符串创建上下文对象。由于它是一个部分类,你可以扩展它以获取类似的连接字符串......
public partial class MyContext
{
public MyContext(string nameOrConnectionString) : base(nameOrConnectionString)
}
这是在运行时,您将传递从第一个上下文中提取的服务器/数据库的连接字符串。像这样的东西就是它的样子......
...
using(var dbNameContext = new DatabaseNameContext())
{
var dbName = dbNameContext.DBNames.FirstOrDefault(dbn => dbn.Name == "db1");
var connectionString = "metadata=res://*/Database..." + dbName.Name;
using(var dbContexts = new MyContext(connectionString))
{
var MyDataList = dbContexts.Data.ToList();
}
}
显然,您应该将连接字符串修复为您自己的连接字符串,并将dbName放在连接字符串中。
您应该确保您的计划完好无损,以保持不同数据库中的所有不同表格相同,以便模型准确无误。否则你将获得RTE。