我正在开发一个 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/