映射之後空我有一個對象嵌套對象成員與Automapper
public class Tenant : EntityBase
{
public virtual string Name { get; set; }
public virtual string Description { get; set; }
public virtual string CreatorName { get; set; }
public virtual TenantState State { get; set; }
public virtual Address Address { get; set; }
public virtual IList<TenantActivity> Activities { get; set; }
public virtual IList<AppUser> Users { get; set; }
public virtual IList<TenantConfig> TenantConfigs { get; set; }
....
}
甲DTO像這樣:
public class TenantDto
{
public Guid Id { get; set; }
public DateTime CDate { get; set; }
public string CUser { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string CreatorName { get; set; }
public TenantState State { get; set; }
public AddressDto Address { get; set; }
public List<TenantActivityDto> Activities { get; set; }
public List<AppUserDto> Users { get; set; }
public List<TenantConfigDto> TenantConfigs { get; set; }
....
}
類Address
是一個的ValueObject其中也有一個DTO。我用下面的映射(標準,無特殊CONFIGS)
public class TenantMapperProfile : Profile
{
protected override void Configure()
{
CreateMap<Tenant, TenantDto>();
CreateMap<TenantDto, Tenant>();
}
}
public class AddressMapperProfile : Profile
{
protected override void Configure()
{
CreateMap<Address, AddressDto>();
CreateMap<AddressDto, Address>();
}
}
在我App.xaml.cs我:
var mapperConfig = new MapperConfiguration(cfg =>
{
cfg.AddProfile<TenantMapperProfile>();
cfg.AddProfile<TenantActivityMapperProfile>();
cfg.AddProfile<AppUserMapperProfile>();
cfg.AddProfile<AddressMapperProfile>();
//cfg.ShouldMapProperty = p => p.SetMethod.IsPrivate || p.GetMethod.IsAssembly;
});
Mapper = mapperConfig.CreateMapper();
然後我把它的服務,像這樣:
public TenantDto CreateTenant(TenantDto tenantDto)
{
tenantDto.CreatorName = creatingUserName;
var tenant = _mapper.Map<Tenant>(tenantDto);
tenant = _tenantManagerService.CreateTenant(tenant);//<-- Screenshot made here
return _mapper.Map<TenantDto>(tenant);
}
第一次調用映射器之後,我製作了一個調試器窗口的截圖。如您所見,tenantDto
實例包含Address
對象中的數據,但tenant
對象包含自己的正確映射的數據,但嵌套的Address
對象只有空值!我在這裏做錯了什麼?
編輯 - 其他信息
調用mapperConfig.AssertConfigurationIsValid();
返回一個錯誤:
The following property on Bedisoco.BedInventory.Sys.Models.Entities.Role cannot be mapped: Roles Add a custom mapping expression, ignore, add a custom resolver, or modify the destination type Bedisoco.BedInventory.Sys.Models.Entities.Role.
的Role
對象是裏面的名錶之一的地方,我覺得List<AppUser>
集合內User
對象包含本身Role
對象列表。它甚至沒有完全實施。
我錯了,假設Automapper默默地忽略了這樣的事情 ??
嘗試在調用'CreateMapper'之前添加'mapperConfig.AssertConfigurationIsValid();'。如果你沒有給automapper足夠的信息,它應該會失敗。 – Eris
您還需要爲CreateMap();'等內部實體創建'CreateMap'。 –
Yogi
我這樣做了,我沒有在這裏粘貼十幾個配置文件類。我已經更新了一切,'AssertConfigurationIsValid()'不再拋出任何異常。但是我的'Address'對象在mapper調用後仍然只包含NULL值。這以數據庫中的不允許NULL值的字段的異常結束。 – ThommyB