Как я могу генерировать таблицы базы данных вручную в контроллере с быстрым переносом кода? - PullRequest
0 голосов
/ 17 октября 2018

Сначала я запустил пользовательскую CMS, используя C # и код MVC.Я добавил контроллер с именем Setup, и в действии контроллера установки GenrateDatabase я получаю DatabaseName Initial ID пользователя и пароль базы данных, после чего генерирую строку подключения к базе данных и обновляю ее в web.config и запускаю метод seed в приведенном ниже коде.

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult GenrateDatabase([Bind(Include = "DataSource,InitialCatalog,UserId,Password")] Database database)
    {
        if (ModelState.IsValid)
        {
            if (database.GenrateDatabase())
            {
                return RedirectToAction("Register");
            }
        }
        ModelState.AddModelError("", "Mmm, something went wrong, Please check your data and try again.");
        return View(database);
    }

и мой класс базы данных:

public class Database
{
    [Required]
    public string DataSource { get; set; }

    [Required]
    public string InitialCatalog { get; set; }

    [Required]
    public string UserId { get; set; }

    [Required]
    public string Password { get; set; }

    private ApplicationDbContext db = new ApplicationDbContext();

    //$"Data Source={DataSource};Initial Catalog={InitialCatalog};User Id ={UserId}; Password = {Password};";
    private string ConnectionString => $"Data Source=.;Initial Catalog=Store;Integrated Security=SSPI";

    public bool GenrateDatabase()
    {
        var configuration = WebConfigurationManager.OpenWebConfiguration("~");
        var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings");
        section.ConnectionStrings["goomooshCNSdb"].ConnectionString = ConnectionString;
        configuration.Save();
        return (GenrateTables()) ? true : false;
    }

    private bool GenrateTables()
    {
        if (db.Database.Exists())
        {
            //var configuration = new DbMigrationsConfiguration();
            Migrations.Configuration configuration = new Migrations.Configuration();
            configuration.ContextType = typeof(ApplicationDbContext);
            var migrator = new DbMigrator(configuration);
            migrator.Configuration.TargetDatabase = new DbConnectionInfo(ConnectionString, "System.Data.SqlClient");
            var migrations = migrator.GetPendingMigrations();
            if (migrations.Any())
            {
                var scriptor = new MigratorScriptingDecorator(migrator);
                var script = scriptor.ScriptUpdate(null, migrations.Last());
                if (!string.IsNullOrEmpty(script))
                {
                    db.Database.ExecuteSqlCommand(script);
                    return true;
                }
            }
        }
        return false;
    }
}

, когда я запускаю свой проект, вводлю данные и отправляю форму, все коды работают отлично, но проблема в db.Database.ExecuteSqlCommand (script);занимает слишком много времени и никогда не завершается, возможно, через 10 минут.

Когда я проверяю базу данных на коде SQL Server, создаются все таблицы и нужны все вещи, но код никогда не перенаправляется для регистрации действия.

Как я могуСоздать этот класс и метод быстрее, как WordPress или другой CMS?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...