如果在 Web.config 文件中指定了两个连接,则应使用DbContext 类的此重载。您需要做的就是传递在<connectionStrings>
您尝试连接的记录中找到的名称,它将进入 Web.config 文件,获取该连接字符串,然后打开连接。
一个示例(使用带有 SQLEXPRESS 的普通本地主机——很容易转换为您的进程)
<connectionStrings>
<add name="Connection1" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog = FirstDB;Integrated Security=True" providerName="System.Data.SqlClient;MultipleActiveResultSets=true;" />
<add name="Connection2" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog = SecondDB;Integrated Security=True" providerName="System.Data.SqlClient;MultipleActiveResultSets=true;" />
</connectionStrings>
然后在您的 DbContext 类中存在以下构造函数:
public MyDbContext(string connectionString) : base(connectionString)
{
}
connectionString
“Connection1”或“Connection2”在哪里。
编辑:根据评论,我认为您需要在您的 DbContext 上创建一个图层,该图层将为您简单地进行切换。您可能需要考虑执行以下步骤:
1) 创建一个具有 DbContext 对象的类(我们称之为 ContextLayer)。这个类是否是静态的取决于你。您可能还想让它实现 IDisposable。
2) 在该项目的 Web.Config 文件中,确保为您可能连接的所有数据库都有一个连接字符串条目。
3) 在层类上有一个方法,该方法将为您提供 DbContext 对象,使用在您的配置文件中找到的第一个连接字符串。作为替代方案,您还可以将您的层放入存储库本身,该存储库本身将 DbContext 对象作为私有字段,并仅公开存储库方法以获取特定信息。
4) 在这个层类中,有一个返回 int 的 SaveChanges() 方法,就像 DbContext.SaveChanges() 一样。在 SaveChanges() 内部检查连接是否良好。否则,使用 DbContext 类的新实例(与当前类中的对象不同的对象)检查 Web.Config 文件中的每个其他连接字符串条目并测试它们。如果其中一个有效,请执行所有逻辑以将更改放在另一个 DbContext 类上。如果您决定将其设为静态类,则可能需要将类上的 DbContext 对象设置为此上下文,具体取决于您的需要。
5) 如果所有上下文都不起作用,则可能让方法返回 -1,并在屏幕上弹出无法保存的信息,因为找不到要保存的数据库。
通过执行此编码一次,您将保证每次尝试保存到数据库时,您只需要对图层类进行 1 次非常简单的调用即可,即使它不起作用,您也会得到一个不错的,干净的方式向客户端显示它无法连接。