我正在开发一个项目,我被要求以一种方式对应用程序进行编程,它会自动为每个新用户注册到应用程序中创建新的数据库。
答案 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:更新数据库