C# 如何使用codefirst迁移更快地在controller中手动生成数据库表?
我首先使用C#和MVC代码启动了一个定制CMS。我添加了一个名为Setup的控制器,在Setup控制器操作GenrateDatabase中,我得到DatabaseName初始目录用户Id和数据库密码,然后生成数据库连接字符串并在web.config中更新它,并在下面的代码中运行seed方法C# 如何使用codefirst迁移更快地在controller中手动生成数据库表?,c#,asp.net,asp.net-mvc,ef-code-first,entity-framework-migrations,C#,Asp.net,Asp.net Mvc,Ef Code First,Entity Framework Migrations,我首先使用C#和MVC代码启动了一个定制CMS。我添加了一个名为Setup的控制器,在Setup控制器操作GenrateDatabase中,我得到DatabaseName初始目录用户Id和数据库密码,然后生成数据库连接字符串并在web.config中更新它,并在下面的代码中运行seed方法 [HttpPost] [ValidateAntiForgeryToken] public ActionResult GenrateDatabase([Bind(Include = "D
[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一样更快地创建此类和方法