使用Include加载相关数据实体ef Core 3.1

阿卜杜勒·哈迪|

要从多个级别加载数据,请使用include,然后在将项目更新到dotnet core 3.1之后,它将无法工作,并且第四级始终为null

var oldMethod = _depositRepository.All()
                    .Include(n => n.StudentStatus.Student.Person.Gender)

我尝试使用ThenInclude

var newMethod = _depositRepository.All()
                    .Include(n => n.StudentStatus)
                        .ThenInclude(s => s.Student)
                            .ThenInclude(p => p.Person)
                                .ThenInclude(g => g.Gender)

在这两种方法中,Gender总是null

public IQueryable<T> All()
{
    return DbSet.AsNoTracking().AsQueryable();
}

我遵循本教程加载相关数据

编辑1:我的一些代码

public class IEntity<IId>
{
    public IId Id { get; set; }
    public string Name { get; set; }
}

public class Gender : IEntity<byte>
{ 
}

public class Person: IEntity<int>
{
    public byte GenderId { get; set; }
    public virtual Gender Gender { get; set; }
}

public class Student : IEntity<int>
{
public int PersonId { get; set; }
public virtual Person Person { get; set; }
}

public class StudentStatus : IEntity<int>
{
    public int StudentId { get; set; }
    public virtual Student Student { get; set; }
}

public class Deposit : IEntity<int>
{
    public int StudentStatusId { get; set; }
    public StudentStatus StudentStatus { get; set; }
}
public interface IRepository<T, IId>
        where T : IEntity<IId>
{
    IQueryable<T> All();
}
public class EfRepository<T, IId> : IRepository<T, IId>
        where T : IEntity<IId>
{
    private readonly UniversityDbContext _dbContext;

    public EfRepository(UniversityDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    private DbSet<T> DbSet => _dbContext.Set<T>();

    public IQueryable<T> All()
    {
        return DbSet.AsNoTracking().AsQueryable();
    }

public class FinancialController : Controller
{
    private readonly IRepository<Deposit, int> _depositRepository;

    public FinancialController(IRepository<Deposit, int>)
    {
        _depositRepository = depositRepository;
    }

    public IActionResult GetStatistic()
    {
        var model= _depositRepository.All()
                        .Include(n => n.StudentStatus)
                            .ThenInclude(s => s.Student)
                                .ThenInclude(p => p.Person)
                                    .ThenInclude(g => g.Gender).ToList();
        return Json(model);
    }
}

调试窗口

阿卜杜勒·哈迪|

我得出的结论是,您可以使用的深度ThenInclude有三个级别的限制。因此,我通过调用_genderRepository并传递GenderId以获取Gender对象解决该问题,但是我认为这不是最好的解决方案,但是比编写sql代码更容易

var newMethod = _depositRepository.All()
                    .Include(n => n.StudentStatus)
                        .ThenInclude(s => s.Student)
                            .ThenInclude(p => p.Person)
                                .ThenInclude(g => g.Gender)
                     .Select(n=>new {
                                      ...
                                      Gender=_genderRepository.Find(k=>k.Id==n.StudentStatus.Student.Person.GenderId)
                                     }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

EF Core 3 1对0关系问题

来自分类Dev

使用EF Core 3.1加载相关数据

来自分类Dev

如何结合使用“ AsNoTracking”方法在EF Core中加载实体和显式加载相关实体

来自分类Dev

如何急于在EF Core中加载相关数据?

来自分类Dev

如何使用Entity Framework Core加载相关实体

来自分类Dev

从 EF Core 2 迁移到 EF Core 3

来自分类Dev

无法使用 EF Core 在 ASP.NET Core 中创建相关实体

来自分类Dev

在 EF Core 3 中播种相关数据,出现错误:未将对象引用设置为对象的实例

来自分类Dev

ASP.NET CORE 1.0存储库加载相关数据EF CORE

来自分类Dev

EF Core 3.0 1:0与流利的关系

来自分类Dev

EF Core 3 Casting无法翻译

来自分类Dev

EF Core 3 Linq无法翻译

来自分类Dev

在EF Core 3中映射json

来自分类Dev

如何使用ef core 1在UWP中运行迁移

来自分类Dev

如何使用EF Core在应用程序中显示3个不同表中的数据

来自分类Dev

在.NET Core中使用SHA-1

来自分类Dev

在 .net core 1 中使用会话

来自分类Dev

表格中多个1:1关系的EF Core 3.1.7数据注释

来自分类Dev

.net core 2.2自动加载相关数据

来自分类Dev

定义实体之间的主键关系时,EF Core 3.1将创建名称为“ 1”的重复列

来自分类Dev

EF Core 3.x-具有Include的简单LINQ无法翻译,客户端评估

来自分类Dev

EF Core渴望加载为相关对象返回null

来自分类Dev

如何在R中将数据1 1 2 2 3 3拆分为1 2 3 1 2 3?

来自分类Dev

EF Core 1.1-preview1添加迁移错误

来自分类Dev

当包含.Query()时,为什么EF Core 3不会将集合标记为已加载?

来自分类Dev

如何映射两个都附加到EF Core 3中其他单个实体的嵌套实体

来自分类Dev

实体框架:更新记录,包括在Net Core 3中

来自分类Dev

SHA1(c#)-与.Net 3和.Net Core不同的结果

来自分类Dev

EF Core-不加载所有子实体

Related 相关文章

  1. 1

    EF Core 3 1对0关系问题

  2. 2

    使用EF Core 3.1加载相关数据

  3. 3

    如何结合使用“ AsNoTracking”方法在EF Core中加载实体和显式加载相关实体

  4. 4

    如何急于在EF Core中加载相关数据?

  5. 5

    如何使用Entity Framework Core加载相关实体

  6. 6

    从 EF Core 2 迁移到 EF Core 3

  7. 7

    无法使用 EF Core 在 ASP.NET Core 中创建相关实体

  8. 8

    在 EF Core 3 中播种相关数据,出现错误:未将对象引用设置为对象的实例

  9. 9

    ASP.NET CORE 1.0存储库加载相关数据EF CORE

  10. 10

    EF Core 3.0 1:0与流利的关系

  11. 11

    EF Core 3 Casting无法翻译

  12. 12

    EF Core 3 Linq无法翻译

  13. 13

    在EF Core 3中映射json

  14. 14

    如何使用ef core 1在UWP中运行迁移

  15. 15

    如何使用EF Core在应用程序中显示3个不同表中的数据

  16. 16

    在.NET Core中使用SHA-1

  17. 17

    在 .net core 1 中使用会话

  18. 18

    表格中多个1:1关系的EF Core 3.1.7数据注释

  19. 19

    .net core 2.2自动加载相关数据

  20. 20

    定义实体之间的主键关系时,EF Core 3.1将创建名称为“ 1”的重复列

  21. 21

    EF Core 3.x-具有Include的简单LINQ无法翻译,客户端评估

  22. 22

    EF Core渴望加载为相关对象返回null

  23. 23

    如何在R中将数据1 1 2 2 3 3拆分为1 2 3 1 2 3?

  24. 24

    EF Core 1.1-preview1添加迁移错误

  25. 25

    当包含.Query()时,为什么EF Core 3不会将集合标记为已加载?

  26. 26

    如何映射两个都附加到EF Core 3中其他单个实体的嵌套实体

  27. 27

    实体框架:更新记录,包括在Net Core 3中

  28. 28

    SHA1(c#)-与.Net 3和.Net Core不同的结果

  29. 29

    EF Core-不加载所有子实体

热门标签

归档