【发布时间】:2021-08-18 09:07:57
【问题描述】:
我有一个实体 vehicle,它可以具有不同的功能(例如 GPS、自动变速箱等)。因此,我创建了这些类
public class Vehicle
{
public Guid Id { get; set; }
public List<Feature> Features { get; set; }
}
public class Feature
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[MaxLength(10)]
public string Code { get; set; }
public string Description { get; set; }
}
如您所见,Feature 类中的 Code 属性是实体的主要 id。要添加车辆,我的控制器中有这样的方法
public async Task<IActionResult> AddVehicle(VehicleDto request)
{
_logger.LogInformation($"Calling {Request.Path.Value}");
try
{
var vehicle = _mapper.Map<Vehicle>(request);
_repository.Add(vehicle);
await _repository.SaveChangesAsync();
return StatusCode(StatusCodes.Status201Created);
}
catch (Exception ex)
{
...
}
}
我传递给我的 API 的对象是
public class VehicleDto
{
public Guid Id { get; set; } = Guid.NewGuid()
public List<string> FeatureCodes { get; set; }
}
通过这种方式,我试图仅传递 FeatureCodes 属性中的功能代码,而不是 Feature 的列表。
我的Profile 是这样的
CreateMap<VehicleDto, Vehicle>()
.ForPath(
dest => dest.Features.Select(f => f.Code), // this is what I desire
opt => opt.MapFrom(src => src.FeatureCodes)
);
但显然它不起作用。
是否可以只映射对象列表的嵌套属性?这是一种不好的做法吗?
【问题讨论】:
标签: c# entity-framework automapper .net-5