c# - 在 EF4.1 代码中,如何覆盖 Web.config 中的 ConnectionString 名称

标签 c# asp.net asp.net-mvc-3 entity-framework-4 ef-code-first

我正在创建一个 Multi-Tenancy Asp.Net MVC 3 Web 应用程序,并首先为数据库模型使用 EF4.1 代码。

对于开发,我很高兴在 App_Data 中使用 SqlServerCE,对于生产,这将转移到 Sql Server 2008。

假设我的上下文称为“MyModels”,默认情况下代码优先在 Web.config 中查找名为“MyModels”的连接字符串。这可以被告知使用 App_Data 中的文件或更改为访问 SQL2008 中的数据库。到目前为止一切正常。

但由于 Multi-Tenancy ,我希望 SqlServerCE 文件名与租户的唯一 ID 相匹配(因此 App_Data 将具有“client_x.sdf”、“client_y.sdf”;Sql Server 2008 将具有单独的数据库) .我不知道如何定向到这些不同的数据库。

我尝试过从 DbContext 继承并提供连接字符串的 MyModels(在 Web.config 中使用“占位符”conn 字符串并将“{clientId}”替换为唯一 ID),我还尝试设置连接MyModels 构造函数中的字符串:

base.Database.Connection.ConnectionString = xxx;

但这似乎永远行不通。我总是收到以下错误:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

(这表明它尚未“配置”为使用 SqlServerCE,因此正在尝试连接到 Sql Server。我认为!)

跟踪代码,此时尚未从 Web.config 中读取 Database.Connection.ConnectionString,因此我无法搜索和替换它,并且可能稍后会被“占位符”conn 字符串覆盖正在筹备中。

我想这一定很简单,但我就是找不到“钩子(Hook)”。有人可以帮忙吗?

最佳答案

我不确定这是否是解决您问题的可行方法。 我的想法是创建一个静态“工厂”类来实例化您的 DbContext 类。代码是这样的:

public static class MyModelsFactory
{
    public static MyModels CreateMyModels()
    {
        string connectionString = string.Empty;
        // some code to retrieve your connectionString.
        return new MyModels(connectionString);
    }
}

并且您可以在任何需要实例化 MyModels 类的地方调用 CreateMyModels 方法:

using (MyModels models = MyModelsFactory.CreateMyModels())
{
    //your code
}

它适用于我需要在运行时根据某些逻辑更改连接字符串的情况。但是我的 DbContext 类是由经典 EF 自动生成的,而不是代码优先。

关于c# - 在 EF4.1 代码中,如何覆盖 Web.config 中的 ConnectionString 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5403399/

相关文章:

c# - Bootstrap 多选控件 - 如何判断选择了什么

javascript - $ ('#' + CommentBoxId).val();不接

c# - WebBrowser aspx 的命名空间

c# - 将当前日期分配给 MVC 中的属性

c# - 如何使用来自不同项目的模型类通过反射提供程序创建 WCF 数据服务 OData?

c# - 如何使用其键从 IEnumerable 集合中获取值?

asp.net - 在不同的项目中创建数据库上下文

asp.net-mvc-3 - 使用FluentValidator验证DateTime

c# - 来自 StreamReader 的原始文件字节,魔数(Magic Number)检测

c# - 使用授权属性验证登录用户的身份