Как динамически создать базу данных используя EF

Разбираюсь с репозиториями и зависимостями в ASP.NET Core MVC + C# + EF Core. Есть решение с тремя проектами, в котором в том числе и отделил бизнес логику от основного приложения.

Моя основная "боль" в том, что у каждого пользователя будет своя БД, и я должен динамически определять conectionString. Имя БД будет хранится в отдельной базе пользователей. Т.е. смысл следующий, после регистрации пользователь получает доступ к дополнительным функциям и создаётся отдельная БД, которую он наполняет по своему усмотрению. Как динамически создать БД имея её имя?

Интерфейс

public interface ICatalogRepository<T>
    where T : class
{
    string nameDataBase { get; set; }
    void CreateDataBase(string nameDataBase);
    IEnumerable<T> GetListObject(); // получение всех объектов
    T GetObject(string id); // получение одного объекта по id
    T GetObject(int id); // получение одного объекта по id
    void Create(T item); // создание объекта
    void Update(T item); // обновление объекта
    void Delete(string roleId, string userId);
    void Delete(string roleId);
    void Save();  // сохранение изменений
}

Репозиторий

public class CatalogRepository<T> : ICatalogRepository<T>
    where T : class
{
    private CatalogDbContext _contextCatalog;
    public string nameDataBase { get; set; }
    public CatalogRepository(CatalogDbContext contextCatalog)
    {
        _contextCatalog = contextCatalog;
    }

    public void CreateDataBase(string nameDataBase)
    {
        using (_contextCatalog =
            new CatalogDbContext($"Server=.\\SQLEXPRESS;Initial Catalog={nameDataBase};Integrated Security=True;"))
        {
            _contextCatalog.Database.EnsureCreated();
        }
    }
}

Контроллер, пока передаю строку таким образом, но это мне кажется не правильно, т.к. методов работы с БД на порядок больше, и передавать для каждого метода такой "геморой" не хочется:

public class HomeController : Controller
{
    private readonly UserManager<ApplicationUser> _userManager;
    readonly ICatalogRepository<Catalog> _contextCatalog;

    public HomeController(UserManager<ApplicationUser> userManager, SignInManager<ApplicationUser> signInManager,
        IRepository<ApplicationUser> context, ICatalogRepository<Catalog> contextCatalog)
    {
        _userManager = userManager;
        _contextCatalog = contextCatalog;
    }
    public IActionResult CreateDb()
    {
        _contextCatalog.CreateDataBase(_context.GetObject(_userManager.GetUserId(User)).NameDataBase);
        return RedirectToAction("Index");
    }
}

Ответы (0 шт):