我有一个使用Razor Views的MVC C#应用程序。我刚刚实现了逐层表格(TPH),并且遇到了一个问题,即我无法.Include()继承的实体。

项目详细信息视图:

@Html.DisplayFor(model => model.FundingOpportunity.FundingProgram.FundingAgency.Name)


当我尝试显示FundingAgency的内容时,它始终为null。我还可以将控制器修改为.include FundingAgency,但它仍然为null。

修改后的项目负责人:

    // GET: /Project/Details/5
    public ActionResult Details(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

        var projectList = db
                            .Projects
                            .Include(p => p.FundingOpportunity)
                            .Include(p => p.FundingOpportunity.FundingProgram)
                            .Include(p => p.FundingOpportunity.FundingProgram.FundingAgency);

        Project project = projectList.Where(p => p.ID == id).First();

        if (project == null)
        {
            return HttpNotFound();
        }

        return View(project);
    }


在这里,我已将项目控制器修改为。包括FundingAgency。您可以看到FundingAgencyID如何具有一个值,并且该值存在于数据库中,但是不存在指向FundingAgency实体的链接。这仅在逐层表(TPH)项中发生。

c# - MVC Linq查询返回继承的实体的ID,但是该实体为null。我如何.Include()TPH成员?-LMLPHP

最佳答案

您可以尝试如下所示。

Program program = db.Programs.Where(X => X.ID == id)
                          .Include(p => p.Agency)
                          .First();

08-03 21:54