我有一个使用Entity Framework的MVC应用程序。部分应用程序涉及创建可以保存到数据库的报告。它还涉及从数据库加载这些报告,修改它们,并将更改保存回数据库。
我注意到的一件事是,当我保存报告时,更改会持久保存到数据库,但如果我重新加载该报告,那么更改就不存在了。显然,Entity Framework不会更新数据库中的报告。我想知道如何强制实体框架识别报告何时陈旧或何时需要从数据库中获取最新版本的报告。
以下是流程的工作原理:
1)在报告配置页面上对报告进行了更改,并单击了“保存”按钮。
2)报告数据通过AJAX调用发送到ReportConfigController。更改将写入报告实体。
3)调用_projectService.UpdateProjectForReport(project)传入报告所属的项目(即project.Reports是包含更新报告的ICollection)。
4)UpdateProjectForReport()如下所示:
public void UpdateProjectForReport(Project project)
{
_context.SaveChanges();
}
5)查看数据库,我验证更改是否已保留。
6)我离开了报告配置页面,然后我回来了。
7)我从下拉菜单中选择刚刚更新的报告。这会触发AJAX调用以加载报告。
8)ReportConfigController进行API调用以获取报告,传入项目ID和报告ID。
9)API获取报告如下:
_project = _projectService.GetProject(projectId); 报告报告= _project.Report.Where(r => r.ReportId == reportId).FirstOrDefault();
...其中_project.Report是一个ICollection。
10)_projectService.GetProject()如下所示:
public Project GetProject(int projectId)
{ return _context.Projects.Include(“Report”)。FirstOrDefault(p => p.ProjectId == projectId);
}
11)报告转换为json并返回。
在步骤9)和10)我需要实体框架来识别它需要获得项目的最新报告。它没有这样做。
有人可以帮我这个吗?
答案 0 :(得分:0)
你可以发布你的报告课吗?无论如何,我想你应该做这样的事情:
; Report report = _project.Report.Where(r => r.ReportId == reportId).OrderByDescending( r => r.LastUpdateDateTime ).FirstOrDefault();
答案 1 :(得分:0)
报告如下:
我的报告类看起来像这样:公共部分类报告 { [System.Diagnostics.CodeAnalysis.SuppressMessage(" Microsoft.Usage"," CA2214:DoNotCallOverridableMethodsInConstructors")] 公共报告() { this.ReportComment = new HashSet(); this.ReportMetric = new HashSet(); this.ReportTopN = new HashSet(); }
public int ReportId { get; set; }
public string GUID { get; set; }
public int ProjectId { get; set; }
public string UserFriendlyProjectName { get; set; }
public string EquipmentType { get; set; }
public string EquipmentTypeJustification { get; set; }
public string LastUpdateUser { get; set; }
public System.DateTime LastUpdateDateTime { get; set; }
public string InsertUser { get; set; }
public System.DateTime InsertDateTime { get; set; }
public Nullable<bool> Bowties { get; set; }
public Nullable<bool> AllDataSafeguards { get; set; }
public string FacilityComparisonFile { get; set; }
public virtual Project Project { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<ReportComment> ReportComment { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<ReportMetric> ReportMetric { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<ReportTopN> ReportTopN { get; set; }
}