我创建了一个数据库第一个实体框架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]
非常感谢
答案 0 :(得分:1)
正如Jhoon Bey所说,在从数据库构建EF数据模型之前,请确保该表将“Property_Ref”标记为主键。 FYR,工作代码:
表格强>
EF模型:
<强>控制器:强>
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>
}