Pho*_*bis 12 union projection automapper asp.net-core-2.0 ef-core-2.0
我有一个名为 DTO 的项目PersonDetail
和一个名为Person
. 当我打电话
db.People.Where(p => p.FirstName == "Joe").Union(db.People.Where(p => Age > 30)).ProjectTo<PersonDetail>(mapperConfig).ToList();
Run Code Online (Sandbox Code Playgroud)
我没有得到PersonDetail
DTO 和实体框架(核心)抛出异常的消息:
ArgumentException:输入序列必须具有“Test.Module.Entities.Person”类型的项目,但它具有“Test.Module.Dtos.PersonDetail”类型的项目。
当我运行代码时:
db.People.Where(p => p.FirstName == "Joe").Union(db.People.Where(p => Age > 30)).ToList();
Run Code Online (Sandbox Code Playgroud)
我Person
毫无例外地得到了实体。
这是一个工作计划(有工会):
{value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Test.Module.Entities.Person]).Where(entity => ((entity != null) And ((63ed0ebd-2c02-4496-ac8d-b836cbf13259 = = entity.CreatedBy) 或 (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) 或 (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
归档时间: |
|
查看次数: |
13487 次 |
最近记录: |