如何在MVC 5中的数据库中创建新表?

时间:2014-07-30 16:28:24

标签: c# mysql asp.net-mvc database

我有一个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();
            }
        }
    }
}

}

2 个答案:

答案 0 :(得分:0)

您必须创建一个DbContext类并添加引用您的Request类的DbSet。然后使用控制台添加迁移和更新数据库。

http://msdn.microsoft.com/en-us/data/jj729737.aspx

答案 1 :(得分:0)

删除当前的迁移,添加db上下文类和dbset以引用请求类,然后​​再次添加迁移。尝试在azure上部署时遇到类似的问题,这很有效。