簡體   English   中英

子實體添加到父實體時不保留

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM