c# - 在 MVC 中使用 EF 创建多个数据库并将数据库名称作为 web.config 中的变量传递给 InitialCatalogue

标签 c# sql-server asp.net-mvc database entity-framework

我正在开发一个 MVC 5 应用程序,它首先使用 2 个代码优先数据库和 1 个数据库。现在我想部署并使其可供多个客户端使用。为此,我想为每个新客户生成我的数据库优先数据库。我的数据库第一个数据库有 103 个表,其中还内置了 PK、FK 和触发器。

我的DbContext如下:

public partial class MyEntities : DbContext
{
    public MyEntities() : base("name=MyEntities")
    {
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
    ** Here are my DbSet's **
}

现在我最关心的是我还想使用 MyEntities 来访问每个客户端的数据库。因为我的所有 Controller 验证都在访问具有该实体名称的数据库,如下所示:

public MyEntities db = new MyEntities();

现在我怎样才能为每个客户端创建一个新的数据库,并且上下文名称应该保持不变,这样我就不必更改 Controller 中的代码了?此外,我还必须将 InitialCatalogue 名称作为变量传递给每个数据库的 web.config

最佳答案

您必须向您的 DbContext 添加一个构造函数,如下所示:

public partial class MyEntities : DbContext
{
    public MyEntities(string nameOrConnectionString)
        : base(nameOrConnectionString)
    {
    }
}

您应该将此构造函数添加到单独的 *.cs 文件中,因为前一个是自动生成的。 还要确保命名空间应与自动生成的代码相同。

现在您可以使用web.config 中所需数据库的连接字符串 实例化DbContext 类,如下所示:

public MyEntities db = new MyEntities(ConfigurationManager.ConnectionStrings["database1"]);

关于c# - 在 MVC 中使用 EF 创建多个数据库并将数据库名称作为 web.config 中的变量传递给 InitialCatalogue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32535652/

相关文章:

c# - VS2010 安装项目卡住在 'Select Installation Folder'

asp.net-mvc - 为什么 CreateAsync(user, password) 有时会失败? (身份 v2 MVC5)

c# - TT 生成器中的辅助方法

c# - 如何使用约束将 T 限制为值类型?

c# - 将超链接添加到 RadioButtonList

.net - 有谁知道 ASP.NET MVC 何时会完全发布?

javascript - 带有 location.href 的按钮在 Firefox 中不起作用

sql - 在sql server中查询时无法区分某些阿拉伯字符

sql - 使用 SQL Server 生成随 secret 钥

sql-server - 使用 SQL 比较表中的两个日期并返回较大者