Сначала я запустил пользовательскую 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?