Linq Autmapper PROJECTO因firstordefault失败

Linq Autmapper PROJECTO因firstordefault失败,linq,automapper,projection,Linq,Automapper,Projection,我正在使用AutoMapper ProjectTo将个人实体映射到EmployeeDto。在我的EmployeeDto中,我有一个要捕获的属性的单一地址。因为此人有一个地址集合,所以我定义了映射以捕获第一个地址: .ForMember(d => d.Address, s => s.MapFrom(m => m.Addresses.FirstOrDefault()) 问题是,当我在映射中包含此项时,我收到一个错误,即“指定类型成员”IsDeleted“不受支持…”IsDelet

我正在使用AutoMapper ProjectTo将个人实体映射到EmployeeDto。在我的EmployeeDto中,我有一个要捕获的属性的单一地址。因为此人有一个地址集合,所以我定义了映射以捕获第一个地址:

.ForMember(d => d.Address, s => s.MapFrom(m => m.Addresses.FirstOrDefault())
问题是,当我在映射中包含此项时,我收到一个错误,即“指定类型成员”IsDeleted“不受支持…”IsDeleted是具有属性[NotMapped]的Person的基本属性。我的雇主不包括被删除的财产

当我查看IQueryable表达式属性时,我得到以下结果:

System.Data.Entity.Core.Objects.ObjectQuery`1[MyProject.Data.Core.Entities.Person]
.MergeAs(MergeOption.AppendOnly)
.Where(
    // Quoted to induce a closure:
    a => a.FirstName.Contains(param.Value))
.Select(
    // Quoted to induce a closure:
    dto => new 0_Culture=neutral_PublicKeyToken=null>
    {
        IsDeleted = dto.IsDeleted,
        UpdateDate = dto.UpdateDate,
        CreateDate = dto.CreateDate,
        Id = dto.Id,
        …remaining Person entity properties removed for brevity,
        Addresses = dto.Addresses,
        Address = dto.Addresses.FirstOrDefault()
    })
.Select(

    // Quoted to induce a closure:
    dto => new EmployeeDto
    {
        …all employeedto property removed for brevity,
        Address = (dto.Address != null) ? new AddressDto { Id = dto.Address.Id } : null
    })
这是我的映射(ForSourceMember()部分是我尝试过的,但它未能解决问题-有或没有相同的结果):


这是EF核心问题,已在EF核心3.0中修复。有关此问题的更多详细信息,请单击此处:


作为一种解决方法,您可以使用
.Take(1)
并投影到
I集合中

我假设没有可忽略的目标成员(ForSourceMember不适用)。能否删除IsDeleted的设置程序?目标上不存在IsDeleted。我无法删除实体(源)上的setter。然后您被卡住了:)我想不出任何其他解决方法。这是一个错误。试试这个版本,有什么消息吗?我正在使用版本8,但它仍然不起作用。
configuration.CreateMap<Person, EmployeeDto>()
            .ForSourceMember(s => s.IsDeleted, x => x.Ignore())
            .ForSourceMember(s => s.CommonProperties, x => x.Ignore())
            .ForSourceMember(s => s.Events, x => x.Ignore())
            .ForMember(d => d.PersonId, s => s.MapFrom(m => m.Id))
            .ForMember(d => d.PersonType, s => s.UseValue(PersonTypes.Employee))                
            .ForMember(d => d.StatusType, s => s.MapFrom(m => m.PersonStatusType.Type))
            .ForMember(d => d.Status, s => s.MapFrom(m => m.PersonStatusType.Code))
            .ForMember(d => d.Address, s => s.MapFrom(m => m.Addresses.FirstOrDefault()))
            ;
.ForMember(d => d.Address, s => s.MapFrom(m => m.Addresses.Count > 0 ? m.Addresses.FirstOrDefault() : null)