我有一个包含context
类的应用程序。一个是主上下文类,第二个是子上下文类。当我第一次运行应用程序时,master数据库被生成。每当我创建一个新用户时,与该用户相关的数据库就会使用子上下文类生成。例如,如果我创建10个用户,则会使用子上下文类(如sub_db_userId
)生成10个数据库。如何为自动生成的数据库添加迁移?
问题是在这个复杂的结构中启用迁移。我知道有些人会说创建新的数据库使用外键关系是不合适的,但我必须处理需求。
我发现this thread在寻找如何为单独的上下文类启用迁移方面非常有帮助,但在我的方案中,由于数据库名与用户标识符相关,因此它不会将更改应用到现有数据库。相反,将更改应用到现有的子数据库,它将创建新的数据库,而不需要像这样的用户标识sub_db_
。我该如何解决这个问题?
下面给出了为每个用户创建新数据库的方式。
我的上下文类:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false) {}
}
public class SubDbContext : DbContext
{
public DbSet<Country> Countries { get; set; }
public DbSet<City> Cities { get; set; }
public SubDbContext() : base("SubDatabaseConnection")
{
}
public SubDbContext(string connectionString) : base(connectionString)
{
Database.SetInitializer<SubDbContext>(new
CreateDatabaseIfNotExists<SubDbContext>());
}
}
连接字符串:
<add name="DefaultConnection"
connectionString="Data Source=.\SQLExpress;Initial Catalog=master_db;Integrated Security=True"
providerName="System.Data.SqlClient" />
<add name="SubDatabaseConnection"
connectionString="Data Source=.\SQLExpress;Initial Catalog={0};Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
我使用{0}
,它们的目的。如何启用迁移并将更改应用到现有数据库?
修改:我链接表到数据库中Register
动作是这样的:
SubDbContext newContext = new SubDbContext(string.Format(userDatabase, "sub_db_" + userId));
newContext.Countries.FirstOrDefault();
newContext.Cities.FirstOrDefault();
您是否知道可能存在的所有用户特定数据库你的“主”数据库(不要与sql-server的主数据库混淆)? –
对不起,我没有得到你?所有用户都存在于我的主数据库中。 –