【问题标题】:My method is only returning one image when there are two images for the entity当实体有两张图片时,我的方法只返回一张图片
【发布时间】:2019-08-15 20:06:41
【问题描述】:

我有一个财产实体。每个属性可以有多个图像。 我有一个检索属性数据和图像的方法,但是当我在 post man 中测试 API 时只返回一个图像。

这是界面

IPropertyRepository:

Task<Property> GetProperty(int id);

属性库:

public async Task<Property> GetProperty(int id)
{
   var property = await _context.Property.Include(ph => ph.Photos)
                .FirstOrDefaultAsync(p => p.Id == id);

   return property;
}

属性控制器:

[HttpGet("{id}", Name = "GetProperty")]
public async Task<IActionResult> GetProperty(int id)
{
    var property = await _repo.GetProperty(id);

    var propertyToReturn = _mapper.Map<PropertyForDetailedDto>(property);

    return Ok(property);
}

这是上面使用的 DataTransferObject 的类。

public class PropertyForDetailedDto
{
    public int Id { get; set; }
    public string Town { get; set; }
    public string County { get; set; }
    public string Address { get; set; 
    public int UserId {get; set; }
    public ICollection<Photo> Photos { get; set; }
}

这里有什么想法吗?

自动映射器

public class AutoMapperProfiles : Profile
    {
        public AutoMapperProfiles()
        {
            CreateMap<UserForRegisterDto, User>();
            CreateMap<PropertyForCreateDto, Property>();
            CreateMap<PropertyToReturnDto, Property>();
            CreateMap<PhotoForCreationDto, Photo>();
            CreateMap<PropertyToReturnDto, Property>();
        }

【问题讨论】:

  • FirstOrDefault 是您只得到一张图片的原因
  • @Andrew 第一个或默认不返回第一个匹配 ID 的属性?
  • @Andrew:不,FirstOrDefaultAsync 适用于 Property 集合,而不是 Property 上的相关 Photos。
  • 你只能得到一个Photo的唯一方法是,如果实际上只有一个关联的Photo。检查您的数据。有点不对劲。
  • @ChrisPratt 你说得对,一定是数据有问题

标签: c# asp.net asp.net-core entity-framework-core


【解决方案1】:

我的问题已经解决了。

在我的 PropertyForDetailedDto 中,我必须为照片添加另一个 DTO,而不是模型。

public ICollection<PhotosForDetailedDto> Photos { get; set;}


public ICollection<Photo> Photos { get; set; }

接下来,我必须同时映射 PropertyForDetailedDto 和上面的 PhotoForDetailedDto

CreateMap<PropertyForDetailedDto, Property>();
CreateMap<Photo, PhotosForDetailedDto>();

我知道正确的属性以及属于返回属性的所有对应属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-21
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多