我有一个MVC 5应用程序,它使用Azure中托管的MySQL作为数据源。我跟着这个tutorial,现在我有了这些tables。关键是在数据库内部,我想创建一个名为“request”的新表。我已经在代码中激活了数据库的迁移。我的应用程序中也有以下代码。
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,当单击提交时,我希望在新表中创建一个新条目。但首先我需要创建表格。我应该通过MySQL工作台使用SQL查询创建它吗?如果是,那么如何将新表与我的代码连接?我想我需要一些数据库上下文,但不知道该怎么做。如果有人可以发布一些代码示例,我会很高兴。
更新
我在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();
}
}
}
}
}
答案 0 :(得分:0)
您必须创建一个DbContext类并添加引用您的Request类的DbSet。然后使用控制台添加迁移和更新数据库。
答案 1 :(得分:0)
删除当前的迁移,添加db上下文类和dbset以引用请求类,然后再次添加迁移。尝试在azure上部署时遇到类似的问题,这很有效。