1

我正在使用 DbContext 处理带有 EntityFramework 主干的 C# 应用程序。该应用程序有两个选择:连接到远程 SQL 服务器 express 或连接到本地 SQL compact 4.0 数据库,以防网络连接不可用。当我的应用程序启动时,一个线程正在检查是否可以连接到远程数据库。否则,它会自动需要切换连接字符串和提供程序才能连接到本地数据库。到目前为止,我试图通过修改 app.config 中的连接字符串部分并在保存配置后强制应用程序刷新该部分来解决此问题。这种方法不是最好的,因为我需要有访问权限才能写入 app.config 文件。你能建议一个更好的方法吗?

4

2 回答 2

2

将连接字符串的管理封装在一个类中,使该类成为单例,并使用它来获取活动的连接字符串,如下所示:

public delegate void ConnectionChangedEventHandler(object sender, EventArgs e);

class ConnStringManager {
    static public ConnStringManager Instance {get;private set;}
    static {
        Instance = new ConnStringManager();
    }
    public event ConnectionChangedEventHandler Changed;
    private readonly string localConn;
    private readonly string remoteConn;
    public string ConnectionString {get; private set;}
    private ConnStringManager() {
        localConn = ... // Get local connection string from the config
        remoteConn = ... // Get remote connection string from the config
        TestAndSetConnectionString();
    }
    public void TestAndSetConnectionString() {
        bool canUseRemote = true;
        if (...) {
             // Do some testing to see if remote DB is accessible
        }
        // Switch the connection string
        var nextString = canUseRemote ? remoteConn : localConn;
        bool changed = nextString != ConnectionString;
        ConnectionString = nextString;
        if (changed && Changed != null) {
             Changed(this, EventArgs.Empty);
        }
    }
}
于 2012-09-21T13:21:35.907 回答
0

DbContext构造函数接受连接字符串的名称或您要选择的实际连接字符串。

您可以做的是测试您的初始连接字符串 - 可能使用快速 ado 连接或简单的东西,然后如果它连接使用它,否则使用您的另一个连接。

一些伪代码:

        YourDbContext YourContext;
        if (TestConnection())
        {
            YourContext = new YourDbContext("ConnectionString1");
        }
        else
        {
            YourContext = new YourDbContext("ConnectionString2");
        }
于 2012-09-21T13:22:17.007 回答