Linq Autmapper PROJECTO因firstordefault失败
我正在使用AutoMapper ProjectTo将个人实体映射到EmployeeDto。在我的EmployeeDto中,我有一个要捕获的属性的单一地址。因为此人有一个地址集合,所以我定义了映射以捕获第一个地址: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
.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)