MVC EF-Code First方法:创建新数据库?

时间:2017-04-26 07:14:04

标签: asp.net-mvc

我正在开发一个项目,我被要求以一种方式对应用程序进行编程,它会自动为每个新用户注册到应用程序中创建新的数据库。

2 个答案:

答案 0 :(得分:0)

您可以定义两个DbContext类,一个是将存储用户的数据库(称为ApplicationDbContext扩展IdentityDbContext),另一个可以是自定义数据库上下文(调用它MyContext)。

来自DefaultConnection的{​​{1}}的公寓将ApplicationDbContext使用Web.config中添加一个基本连接字符串,可能是这样的(注意{0}你可以然后在string.Format())中使用:

<add name="BaseConnectionString" connectionString="Data Source=(local)\SQLEXPRESS;Initial Catalog={0};Integrated Security=True"
  providerName="System.Data.SqlClient" />

在成功创建用户后的Register中的AccountController操作中,您可以使用从BaseConnectionString和{{生成的连接字符串创建db上下文的新实例1}}创建的用户。

Id

然后使用某些东西来触发数据库创建(如果它不存在),例如

string baseConnectionString = ConfigurationManager.ConnectionStrings["BaseConnectionString"].ConnectionString;
MyDbContext newContext = new MyDbContext(string.Format(baseConnectionString, "MyApplicationDB_" + user.Id));

如下所示定义构造函数,如果数据库已经不存在,它将创建数据库,并且数据库名称将是唯一的,因为用户ID是例如var user = newContext.Posts.FirstOrDefault(); // Assuming you have a DbSet<Posts> there 。在这里,您还可以执行任何其他逻辑,例如插入一些数据,这些数据将用作新创建的数据库的上下文数据。

我用于MyApplicationDB_9b8cd172-7a3a-4a09-965a-2204e97bc850的构造函数将连接字符串作为参数并调用基本构造函数,并且必须初始化它以创建数据库(如果它不存在)。

MyDbContext

现在,在您的控制器中,您始终可以使用public MyDbContext(string connectionString) : base(connectionString) { Database.SetInitializer<MyDbContext>(new CreateDatabaseIfNotExists<MyDbContext>()); } 的实例来查询数据库实体,并在实例化时,根据登录的用户ID提供连接字符串。

MyContext

答案 1 :(得分:0)

你只需要删除你的连接字符串

1: 如果你没有任何迁移,那么添加一个

1:启用迁移

2: add-migration InitialMigration

3:更新数据库

如果您已经有可用的迁移,只需使用

1:更新数据库