gpt4 book ai didi

automapper - 如何正确使用 EF Core 和 AutoMapper ProjectTo 和 Unions?

转载 作者:行者123 更新时间:2023-12-05 00:13:11 25 4
gpt4 key购买 nike

我的设置

  • ASP.NET 核心 2.0
  • EntityFrameworkCore 2.0.1
  • AutoMapper 6.2.2


  • 问题

    我有一个名为 PersonDetail 的 DTO 项目和一个名为 Person 的实体.
    当我打电话
    db.People.Where(p => p.FirstName == "Joe").Union(db.People.Where(p => Age > 30)).ProjectTo<PersonDetail>(mapperConfig).ToList(); 

    我不明白 PersonDetail DTO 和 Entity Framework (核心)抛出异常并显示以下消息:

    ArgumentException: The input sequence must have items of type 'Test.Module.Entities.Person', but it has items of type 'Test.Module.Dtos.PersonDetail'.



    没有问题的例子

    当我运行代码时:
     db.People.Where(p => p.FirstName == "Joe").Union(db.People.Where(p => Age > 30)).ToList(); 

    我收到了 Person实体无一异常(exception)。

    执行计划

    这是一个工作计划(有工会):

    {value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Test.Module.Entities.Person]).Where(entity => ((entity != null) And ((63ed0ebd-2c02-4496-ac8d-b836cbf13259 == entity.CreatedBy) Or (393a6bb0-b437-4664-beb0-6800f509451b == entity.CreatedBy)))).Union(value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Test.Module.Entities.Person]))}



    现在这是相同的计划,但也有自动映射器投影:

    {value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Test.Module.Entities.Person]).Where(entity => ((entity != null) And ((63ed0ebd-2c02-4496-ac8d-b836cbf13259 == entity.CreatedBy) Or (393a6bb0-b437-4664-beb0-6800f509451b == entity.CreatedBy)))).Union(value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Test.Module.Entities.Person])).Select(dto => new PersonDetail() {FirstName = dto.FirstName, LastName = dto.LastName, Deleted = dto.Deleted, Age = dto.Age, CreatedUtc = dto.CreatedUtc, CreatedBy = dto.CreatedBy, Id = dto.Id, RecordVersion = dto.RecordVersion, DisplayLabel = ((dto.FirstName + " ") + dto.LastName)})}



    笔记:

    我只是调用 ToList 来减少这个问题到它的最小形式。我知道在这个例子中我似乎不需要使用 ProjectTo 。在我的实际代码中,我们使用的是 OData,我们需要最终结果是投影查询,其中 DTO 作为 Queryable 对象。我也明白这个联盟不是一个很好的联盟例子,再次,只是为了简化联盟问题。

    Ia 还在各自的 GitHub 项目上打开了问题:

    EntityFrameworkCore : https://github.com/aspnet/EntityFrameworkCore/issues/11033

    AutoMapper : https://github.com/AutoMapper/AutoMapper/issues/2537

    最佳答案

    这是一个 EF Core 错误,已在 EF Core 2.1 中修复
    https://github.com/aspnet/EntityFrameworkCore/issues/11033

    关于automapper - 如何正确使用 EF Core 和 AutoMapper ProjectTo 和 Unions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48847744/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com