我对.NET MVC 5相当陌生,主要来自PHP背景。我有一个带有List集合的'Project'模型。当我仅使用测试控制器将数据保存到集合中时,它将会保存到数据库中。MVC NET 5链接模型保存到数据库但不加载
问题出现在我试图从该集合中取出信息时,因为它总是返回为空。
我的项目模型:
public class Project
{
public int ID { get; set; }
[Display(Name = "Project")]
public string ProjectNumber { get; set; }
[Display(Name = "Client")]
public string Client { get; set; }
[DataType(DataType.MultilineText)]
public string Description { get; set; }
[Display(Name = "Start Date")]
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public DateTime StartDate { get; set; }
[Display(Name = "Required Date")]
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public DateTime RequiredDate { get; set; }
public string ProjectManagerId { get; set; }
[ForeignKey("ProjectManagerId")]
[Display(Name = "Project Manager")]
public ApplicationUser ProjectManager { get; set; }
[Display(Name = "Project Members")]
public int[] ProjectMembers { get; set; }
[Display(Name = "Tasks")]
public List<ProjectTask> TaskCollection { get; set; }
}
public class ProjectDb : DbContext
{
public ProjectDb() : base("DefaultConnection")
{
}
public DbSet<Project> Projects { get; set; }
}
我ProjectTask型号: 公共类ProjectTask {
public int Id { get; set; }
public int ProjectId { get; set; }
[ForeignKey("ProjectId")]
public virtual Project Project { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string TaskNotes { get; set; }
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public DateTime StartDate { get; set; }
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public DateTime DueDate { get; set; }
public int Duration { get; set; }
public TaskStatus Status { get; set; }
public TaskAlertLevel AlertLevel { get; set; }
public List<ProjectTask> SubTasks { get; set; }
public string Progress { get; set; }
}
public class ProjectTaskDb : DbContext
{
public ProjectTaskDb() : base("DefaultConnection")
{
}
public DbSet<Project> ProjectTasks { get; set; }
}
我的控制器,我只是想多看少空例外以外的东西:
public ActionResult DetailTasks(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Project project = db.Projects.Find(id);
if (project == null)
{
return HttpNotFound();
}
var tasks = project.TaskCollection;
ViewBag.tasks = tasks;
return View(project);
}
希望它是索姆完全明显和愚蠢的东西,现在逃脱了我!
你确定你确实将它保存到数据库吗?如果你调用db.Projects.Add(不管);而不是调用db.SaveChanges();在那之后,它实际上从来没有真正被保存到数据库中,它只是一个软添加,但不会提交更改。 –
是的,它绝对保存,因为我调用db.Projects.Add(项目)以及db.SaveChanges()。测试数据也显示在原始数据库表中,他们只是从未出来访问过。 –
可能最好检查您的ID列是否实际标记为主键,如果不是,则将[Key] Data属性放在其上方并添加新的迁移/更新数据库。 如果它仍然是拙作,那么你总是可以将行翻转到 Project project = db.Projects.where(a => a.ID == id).FirstOrDefault(); –