将列表映射到列表不起作用(Automapper)

问题描述 投票:0回答:1

我有2个模型,一个模型用于数据库,一个模型是DTO

这里是数据库模型

public class Tenancy : FullAuditedEntity, IMustHaveTenant
{
    public DateTime? TenancyStartDate { get; set; }
    public DateTime? TenancyEndDate { get; set; }
    public DateTime? RenewalDate { get; set; }
    public DateTime? ContractEndDate { get; set; }
    public DateTime? ReminderNotificationDate { get; set; }
    public ContractTermTimeUnit ContractTermTimeUnit { get; set; }
    public int ContractTermLength { get; set; }
    public TenancyStatus Status { get; set; }
    public int PropertyId { get; set; }
    public int ContractTypeId { get; set; }
    public int TenantId { get; set; }
    public int? TenancyChargeId { get; set; }
    [ForeignKey("ContractTypeId")]
    public ContractType ContractType { get; set; }
    [ForeignKey("PropertyId")]
    public Property Property { get; set; }

    [ForeignKey("TenancyChargeId")]
    public TenancyCharge TenancyCharge { get; set; }
    public int? FrequencyTypeId { get; set; }
    [ForeignKey("FrequencyTypeId")]
    public FrequencyType Frequencytype { get; set; }
    public decimal RentlValue { get; set; }
    public decimal DepositValue { get; set; }
    public int? RentFrequencyTypeId { get; set; }
    [ForeignKey("RentFrequencyTypeId")]
    public RentFrequencyType RentFrequencyType { get; set; }

    public virtual ICollection<PropertyTenantTenancy> PropertyTenantTenancies { get; set; }

}

这里是DTO

 public class TenancyDto : EntityDto<int?>
{
    public DateTime? TenancyStartDate { get; set; }
    public DateTime? TenancyEndDate { get; set; }
    public DateTime? RenewalDate { get; set; }
    public DateTime? ReminderNotificationDate { get; set; }
    public ContractTermTimeUnit ContractTermTimeUnit { get; set; }
    public int ContractTermLength { get; set; }
    public virtual DateTime? ContractEndDate { get; set; }
    public TenancyStatus Status { get; set; }
    public int PropertyId { get; set; }
    public int PropertyTenantId { get; set; }
    public decimal RentValue { get; set; }
    public decimal DepositValue { get; set; }

    public int? TenantId { get; set; }
    public int ContractTypeId { get; set; }
    public IList<TenancyTenantDto> Tenants { get; set; }
}

我这样进行保存

public async Task CreateOrEditTenancy(TenancyDto input)
    {
        var tenantId = AbpSession.TenantId;

        await CheckTenancyConflictsAsync(input);
        if (input.Id.HasValue)
        {
            var tenancy = await _tenancyRepository.GetAsync(input.Id.Value);
            await _tenancyRepository.UpdateAsync(ObjectMapper.Map(input, tenancy));
        }
        else
        {
            if (tenantId == null)
            {
                throw new UserFriendlyException(L("FunctionalityIsNotAvailable"));
            }

            input.TenantId = (int)tenantId;
            input.Status = TenancyStatus.Draft;
            await _tenancyRepository.InsertAsync(ObjectMapper.Map<Tenancy>(input));
        }
    }

以及类似的映射

 configuration.CreateMap<TenancyDto, Tenancy>()
            .ForMember(x => x.PropertyTenantTenancies, opt => opt.MapFrom(aa => aa.Tenants));

所有作品,除了这些东西public IList<TenancyTenantDto> Tenants { get; set; }

我在输入中有此列​​表。我没有错误。结果只是空表。似乎没有映射。我的问题在哪里?

c# .net asp.net-mvc asp.net-core automapper
1个回答
0
投票

[我认为这基本上是因为您正在从List到ICollection类型显式创建映射-从我所看到的看来,人们似乎最终会反复进行此操作(我还没有看到直接的强制转换/转换)。但是,如果您希望它起作用,则此方法似乎可以完成任务。

Here is Example

说明Here

© www.soinside.com 2019 - 2024. All rights reserved.