Asp.net mvc MVC,实体框架,创建新项目时未显示外键数据
使用MVC4和EF5代码优先。出现了一个问题,即当创建一个新的数据记录时,引用一个外键行。列出已创建的条目一切看起来都很好:Asp.net mvc MVC,实体框架,创建新项目时未显示外键数据,asp.net-mvc,Asp.net Mvc,使用MVC4和EF5代码优先。出现了一个问题,即当创建一个新的数据记录时,引用一个外键行。列出已创建的条目一切看起来都很好: @foreach (var item in Model) { @Html.DisplayFor(modelItem => item.Location.name) @Html.DisplayFor(modelItem => item.Action.name) ... 创建新记录引用无法显示外来内容(名称): 在控制器中正确填写外键(参见简化示
@foreach (var item in Model) {
@Html.DisplayFor(modelItem => item.Location.name)
@Html.DisplayFor(modelItem => item.Action.name)
...
创建新记录引用无法显示外来内容(名称):
在控制器中正确填写外键(参见简化示例)
并且在数据库中正确创建了记录。仅名称不显示在视图上。我必须在创建过程中获取关联的reocrd myself吗?我在代码中没有看到任何对
SaveChanges()
的调用。您需要调用它,以便外键属性加载导航属性。或者,就像你在问题末尾所说的那样,显式加载它们。+1这就是我一直在做的,导航属性在你将实体插入到数据库后工作得很好,仅使用foreignkeyid,但我真的想知道是否有解决方法。你能显示Timerecord类和view Create吗?@sormii,这就是使用外键属性定义导航和集合属性时得到的结果。您可以保存实体,然后使用Include
扩展方法快速加载相关实体。引用是否自己进行:tm.Location=dbLoc.Location.Find(tm.locationID);tm.Action=dbAct.Action.Find(tm.actionID);然后,您应该更新问题中的代码以表明这一点,因为它应该提供不同的EF行为和不同的结果。
...
@Html.LabelFor(model => model.locationID)
@Html.DisplayFor(model => model.Location.name)
@Html.LabelFor(model => model.actionID)
@Html.DisplayFor(model => model.Action.name)
...
public ActionResult Create()
{
Timerecord tm = new Timerecord();
tm.currentTime = DateTime.Now;
tm.locationID = 1;
tm.actionID = 5;
ViewData.Model = tm;
return View();
}