我一直在试图创建一个简单的门户来跟踪移动应用程序中的日志。因此,我已经使用实体框架和MVC3来帮助我。然而,最近我一直试图从数据库中检索实体时一直卡住。在实体框架中使用.find方法时的空实体
下面是Run类:
namespace LifestyleGuide.Models
{
[DataContract(IsReference = true)]
[KnownType(typeof(User))]
public partial class Run
{
[DataMember]
public string User_ID { get; set; }
[DataMember]
public System.DateTime Date { get; set; }
[DataMember]
public Nullable<int> Distance { get; set; }
[DataMember]
public Nullable<int> Duration { get; set; }
[DataMember]
public Nullable<int> Calories { get; set; }
[DataMember]
public virtual User User { get; set; }
}
}
USER_ID和日期形成复合键,其中user_id是从用户表的外键。
及以下是从控制器中的“详细信息”的方法:
public ActionResult Details(String id, DateTime date)
{
using (var db = new inspireEntities())
{
Run run = db.Runs.Find(id, date);
return View(run);
}
}
然而,当我尝试运行它,运行对象总是显示为一个空。
任何建议,非常感谢!
编辑: 这里是主页的看法。
@model IEnumerable<LifestyleGuide.Models.Run>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
<center>User ID</center>
</th>
<th>
<center>Date</center>
</th>
<th>
<center>Distance</center>
</th>
<th>
<center>Duration</center>
</th>
<th>
<center>Calories</center>
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.User_ID)
</td>
<td>
@Html.DisplayFor(modelItem => item.Date)
</td>
<td>
@Html.DisplayFor(modelItem => item.Distance)
</td>
<td>
@Html.DisplayFor(modelItem => item.Duration)
</td>
<td>
@Html.DisplayFor(modelItem => item.Calories)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.User_ID, date = item.Date }) |
@Html.ActionLink("Details", "Details", new { id = item.User_ID, date = item.Date }) |
@Html.ActionLink("Delete", "Delete", new { id = item.User_ID, date = item.Date })
</td>
</tr>
}
</table>
表中的字段直接从数据库填充,因此应该已经存在。
注意:使用视图创建和访问运行对象没有问题。 null运行对象只发生在我直接向数据库中插入语句并且当我尝试使用如上所示的.find方法检索它时。
由于您不共享视图或控制器填充视图,我想知道:你确定这些键总是会返回一个记录?他们是否已经来自数据库? (最佳选择在一起...) –
感谢您的回复!我已经编辑了我的帖子,如上所示。 – user2029253