以下是我目前如何满足我的要求。
当任何新用户/租户提交表单时,
- 首先,我将用户/租户详细信息插入公共/主数据库
- 然后我在服务器上创建一个带有租户名称的新数据库。
提交行动:-
[HttpPost]
public ActionResult CreateTenant(Tenanat tenanat)
{
//Master/Common DB
using (DataContext ctx = new DataContext())
{
ctx.Tenanats.Add(tenanat);
ctx.SaveChanges();
string con = ConfigurationManager.ConnectionStrings["tenantContext"].ConnectionString;
con = con.Replace("tenDbName", tenanat.Name.Trim());
TenantContext tenantContext = new TenantContext(con,tenanat);
}
return RedirectToAction("Index", "Tenanat",tenanat);
}
这就是我的 TenantContext 类的样子,它处理主要内容以按需生成数据库。
public class TenantContext : DbContext
{
public TenantContext(string connection, Tenanat tenanat)
: base(connection)
{
//create DB for tenant
Database.CreateIfNotExists();
//create user for the new Db
string sql = "CREATE LOGIN \"" + tenanat.Email + "\" WITH PASSWORD = '" + tenanat.Password + "'; USE " + tenanat.Name + "; CREATE USER \"" + tenanat.Email + "\" FOR LOGIN \"" + tenanat.Email + "\" WITH DEFAULT_SCHEMA = dbo;";
Database.ExecuteSqlCommand(sql);
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
public DbSet<Product> Products { get; set; }
public DbSet<Order> Orders { get; set; }
}}
请随时验证此方法并添加建议。
希望这可以帮助!!