[英]Entity Framework - New child entities not added to database on saving parent entity (only in production environment)
[英]Child entities not persisting when added to parent entity
我對EntityFramework的工作方式有疑問,因為它在我正在開發的應用程序中做得有些奇怪。 簡而言之,我將子實體(報告)添加到父實體(項目),將其保存到數據庫,然后當我嘗試檢索它時,父實體中不存在子實體(報告)實體(項目)。
這是我正在做的更詳細的步驟:
public JsonResult SubmitData(int projectId, string data = null)
Project project = _projectService.GetProject(projectId);
Report report = CreateReport(data);
project.Report.Add(report);
_projectService.UpdateProjectForReport(project);
// Rest of code omitted...
}
public class ProjectService : IProjectService
{
public void UpdateProjectForReport(Project project)
{
_context.SaveChanges();
}
// Rest of code omitted...
}
^在用戶在表單上填寫一些信息並單擊提交后,將運行以上代碼。 信息作為稱為“數據”的json字符串傳遞到SubmitData(...)。 檢索要保存報告的項目,將json數據轉換為報告,將報告添加到項目,並將對項目的更改保存到數據庫。
我已經確認該報告實際上已保存到數據庫中並與該項目相關聯。
然后,下一步涉及檢索報告:
public async Task<HttpResponseMessage> GetTop3ReportCard([FromUri] int
projectId, [FromUri] int reportId = 0)
{
_project = _projectService.GetProject(projectId);
Report report = _project.Report.Where(r => r.ReportId == reportId).FirstOrDefault();
// Rest of code omitted...
}
但是報告始終為空。
我已經驗證了對GetTop3ReportCard(...)的調用中的reportId不為0。projectId也不為。
解決此問題的唯一方法是在Visual Studio中重新啟動應用程序。 一旦執行完此操作,然后嘗試檢索我的報告,它返回的值就不會為null。
但是,為什么一旦將諸如Project之類的實體保存到數據庫后,EntityFramework便不會加載所有屬於它的報表? 關於EntityFramework的工作方式,我在這里不知道嗎?
實體框架使用SQL為其數據庫提供支持。 SQL不在父記錄中存儲記錄或對象,它為此定義了關系和表。 當您將對象存儲在父對象中時,實體框架將僅存儲其ID,並且原始對象屬性將始終為null。 您需要將子對象存儲在另一個表中,並且必須為其定義一個單獨的類。
現在,要獲取您的對象,您有兩個選擇,要么查詢該對象的表以使用主表中的ID來獲取該對象,要么使用include方法。
var rep = Report.FirstOrDefault(r => r.ReportId == reportId);
要么
var data = _project.FirstOrDefault(x => x.Id == someId).Include("Report");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.