2017-09-14 117 views
0

我有一个使用实体框架的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(专案编号); Report report = _project.Report.Where(r => r.ReportId == reportId).FirstOrDefault();

...其中_project.Report是一个ICollection。

10)_projectService.GetProject()看起来是这样的:

公共项目GetProject(INT专案编号)

{ 回报_context.Projects.Include( “报告”)FirstOrDefault(P =>点.ProjectId == projectId);

}

11)将报告转换为json并返回。

这是在步骤9)和10)我需要实体框架认识到它需要获得最新的项目报告。它并没有这样做。

有人可以帮我吗?

回答

0

你可以发布你的报告类吗?无论如何,我想你应该就在做这样的事情:

; Report report = _project.Report.Where(r => r.ReportId == reportId).OrderByDescending(r => r.LastUpdateDateTime).FirstOrDefault(); 
+0

修改我的答案。它能解决你的问题吗? – Massimo

0

报告如下:

我的报告类看起来是这样的:公共部分类举报 { [System.Diagnostics.CodeAnalysis.SuppressMessage( “Microsoft.Usage”,“CA2214:DoNotCallOverridableMethodsInConstructors”)] public Report() { 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; } 
} 
相关问题