MVC5实体框架数据库首先使用字符串主键

时间:2013-12-02 09:27:02

标签: asp.net-mvc-4 frameworks entity

我创建了一个数据库第一个实体框架MVC5应用程序。该表有一个字符串主键。我使用脚手架来创建控制器。我的控制器/索引工作正常,但详细信息,编辑和创建不起作用。如果我使用int主键,所有CRUD工作正常。 EF不支持字符串主键。

这是我的Index.cshtml

@foreach (var item in Model) {
<tr>

    <td>
        @Html.DisplayFor(modelItem => item.Owner)
    </td>

    <td>
        @Html.DisplayFor(modelItem => item.Address)
    </td>

    <td>
        @Html.ActionLink("Edit", "Edit", new { id=item.Property_Ref }) |
        @Html.ActionLink("Details", "Details", new { id=item.Property_Ref }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.Property_Ref })
    </td>

</tr>
}

这是我的控制器

 // GET: /Property/
    public ActionResult Index()
    {
        return View(db.Tables.ToList());
    }

    // GET: /Property/Details/5
    public ActionResult Details(string id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Table table = db.Tables.Find(id);
        if (table == null)
        {
            return HttpNotFound();
        }
        return View(table);
    }

    // GET: /Property/Create
    public ActionResult Create()
    {
        return View();
    }

所有这些代码首先由MVC5数据库生成,并使用脚手架作为控制器。

索引工作正常并列出所有记录, 当我单击“详细信息”时,我在“/”应用程序中收到错误服务器错误。

http://localhost:51356/Property/Details/2 - 这里2是一个字符串主键![在此输入图像描述] [1]

非常感谢

1 个答案:

答案 0 :(得分:1)

正如Jhoon Bey所说,在从数据库构建EF数据模型之前,请确保该表将“Property_Ref”标记为主键。 FYR,工作代码:

表格

Table

EF模型:

EF Model

<强>控制器:

private TestDbEntities1 db = new TestDbEntities1();

    // GET: /Person/
    public ActionResult Index()
    {
        return View(db.People.ToList());
    }

    // GET: /Person/Details/5
    public ActionResult Details(string id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Person person = db.People.Find(id);
        if (person == null)
        {
            return HttpNotFound();
        }
        return View(person);
    }

    // GET: /Person/Create
    public ActionResult Create()
    {
        return View();
    }

<强>索引:

<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
    <th>
        @Html.DisplayNameFor(model => model.Name)
    </th>
    <th></th>
</tr>

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Name)
    </td>
    <td>
        @Html.ActionLink("Edit", "Edit", new { id=item.Property_ref }) |
        @Html.ActionLink("Details", "Details", new { id=item.Property_ref }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.Property_ref })
    </td>
</tr>

}