我如何在MVC 5数据库中创建一个新表
本文关键字:新表 一个 创建 MVC 数据库 | 更新日期: 2023-09-27 18:15:34
我有一个MVC 5应用程序,它使用托管在Azure中的MySQL作为数据源。我遵循了这个教程,现在我有了这些表格。关键是,在数据库中,我想创建一个名为"请求"的新表。我已经在代码中激活了数据库的迁移。我也有以下代码在我的应用程序。
Request.cs:(在Models文件夹内)
public class Request
{
public int RequestID { get; set; }
[Required]
[Display(Name = "Request type")]
public string RequestType { get; set; }
}
Test.cshtml:
@model Workfly.Models.Request
@{
ViewBag.Title = "Test";
}
<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>
@using (Html.BeginForm("SaveAndShare", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<h4>Create a new request.</h4>
<hr />
@Html.ValidationSummary("", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(m => m.RequestType, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.RequestType, new { @class = "form-control", @id = "keywords-manual" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-default" value="Submit!" />
</div>
</div>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
HomeController.cs:
[HttpPost]
public ActionResult SaveAndShare(Request request)
{
if (ModelState.IsValid)
{
var req = new Request { RequestType = request.RequestType };
}
return RedirectToAction("Share");
}
关键在于,我希望用户在Test视图中填写表单并单击submit,当单击submit时,我希望在新表中创建一个新条目。当然,首先我需要创建表格。我应该通过MySQL工作台使用SQL查询来创建它吗?如果是,那么我如何将新表与我的代码连接?我想我需要一些DB上下文,但不知道如何做到这一点。如果有人可以张贴一些代码示例,我会很高兴。
更新:
我在Models文件夹中创建了一个新类,命名为RequestContext.cs,其内容如下:
public class RequestContext : DbContext
{
public DbSet<Request> Requests { get; set; }
}
然后,我执行了"Add-Migration Request"
和"Update-Database"
命令,但仍然没有。还请注意,我有一个MySqlInitializer类,它看起来像这样:
public class MySqlInitializer : IDatabaseInitializer<ApplicationDbContext>
{
public void InitializeDatabase(ApplicationDbContext context)
{
if (!context.Database.Exists())
{
// if database did not exist before - create it
context.Database.Create();
}
else
{
// query to check if MigrationHistory table is present in the database
var migrationHistoryTableExists = ((IObjectContextAdapter)context).ObjectContext.ExecuteStoreQuery<int>(
string.Format(
"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '{0}' AND table_name = '__MigrationHistory'",
""));
// if MigrationHistory table is not there (which is the case first time we run) - create it
if (migrationHistoryTableExists.FirstOrDefault() == 0)
{
context.Database.Delete();
context.Database.Create();
}
}
}
}
}
您必须创建DbContext类并添加引用Request类的DbSet。然后使用控制台添加迁移和更新数据库。
http://msdn.microsoft.com/en-us/data/jj729737.aspx删除当前的迁移,添加db上下文类和dbset来引用请求类,然后再次添加迁移。在尝试在azure上部署时也遇到了类似的问题,这是有效的。