如何通过实体框架中的链接表获取实体?

时间:2021-03-16 15:44:08

标签: c# .net entity-framework

有人编辑连接表,因为我不记得表中的单词,该表只包含 2 个实体的 2 个外键。编辑:我认为它被称为链接表?

db-model 看起来像这样 DB-Model entities。在模型和 DTO 的代码中,datadock 有一个 List<Standard>。所以代码看起来像这样:

    private List<DatadockDTO> GetDatadocksByDataportId(Guid id)
    {
        var query = from r in _ddRepository.GetIQueryable()
                    where r.DataportId == id
                    select new DatadockDTO
                    {
                        Id = r.Id,
                        Name = r.Name,                            
                        Standards = r.Standards //Error not possible, the only suggestion it gives is DataDockStandards
                        //I used to put GetStandardsByDatadockId(r.Id) here but there is another way apparently
                    };
        List<DatadockDTO> datadocks = query.ToList();
        return datadocks;
    }

但与我共事的人告诉我 Entity Framework 允许你做类似的事情。但我不知道该去哪里找。

认为它应该如何工作的额外代码:

    private List<StandardDTO> GetStandardsByDatadockId(int id)
    {
        var query = from r in _standardRepository.GetIQueryable()
                    where r.DataDockStandards.Any(dds => dds.DatadockId == id)
                    select new StandardDTO
                    {
                        Id = r.Id,
                        Name = r.Name,
                        StandardVersions = GetStandardVersionsByStandardId(r.Id)
                    };
        List<StandardDTO> standards = query.ToList();
        return standards;
    }

    private List<StandardVersionDTO> GetStandardVersionsByStandardId(int id)
    {
        var query =
          from r in _svRepository.GetIQueryable()
          where r.StandardId == id
          select new StandardVersionDTO
          {
              Id = r.Id,
              Name = r.Name,
          };
        List<StandardVersionDTO> versions = query.ToList();
        return versions;
    }

编辑(第二天):好吧,显然我可以以某种方式选择 r.Standards。我没有改变任何东西,我突然可以选择 r.Standards 而不会出错......

1 个答案:

答案 0 :(得分:1)

您需要配置多对多关系。

Here 是在 EF Core 中的实现方式(请记住,它仅适用于版本 5 及更高版本,即使在 3.1 中也不支持)。

here 是 EF 6 中的做法。

如果操作正确,您的 DataDock 实体将具有 Standards 导航属性,您将能够在 LINQ 查询中使用它。