0
我有四個實體組織和地址..for簡便起見,我在實體省略了所有的問題,但性能和的ViewModelsAutomapper問題
public class Organization : VersionedAuditableEntityWithTypedId<Guid>, IAggregateRoot
{
//Organization related properties are in here
/// <summary>
/// Organization Address
/// </summary>
[NotNull]
public virtual Address Address { get; set; }
}
public class Address : AuditableEntityWithTypedId<Guid>
{
// Address related properties are in here
/// <summary>
/// Region/State
/// </summary>
[NotNull]
public virtual Region Region { get; set; }
}
public class Country : EntityWithTypedId<Guid>
{
/// <summary>
/// Name of country
/// </summary>
[DomainSignature, Length(Max = 50), NotNullNotEmpty, SelectListItemDisplay, SelectListItemValue]
public virtual string Name { get; set; }
}
public class Region : EntityWithTypedId<Guid>
{
/// <summary>
/// Name of region
/// </summary>
[Length(Max = 50), NotNullNotEmpty, SelectListItemDisplay,SelectListItemValue]
public virtual string Name { get; set; }
/// <summary>
/// Country
/// </summary>
[NotNull]
[SuppressMessage("Microsoft.Naming", "CA1721", Justification = "Common naming for type descriptions")]
public virtual Country Country { get; set; }
}
我有兩個視圖模型
- EditOrganizationViewModel
- EditAddressViewModel
在我的埃德itOrganizationViewModel我有以下特性
public class EditOrganizationViewModel
{
/// <summary>
/// Organization address
/// </summary>
public EditAddressViewModel Address { get; set; }
}
我EditAddressViewModel具有國家
public class EditAddressViewModel
{
/// <summary>
/// List of countries
/// </summary>
public IEnumerable<SelectListItem> Countries { get; set; }
}
我的國家屬性不會映射到任何東西在我的地址實體的列表,但需要顯示的國家和它的列表在我的服務層中出現。
我在我的應用程序,所以一旦進行映射...
曾經爲EditAddressViewModel ...
Mapper.CreateMap<Address, EditAddressViewModel>()
.ForMember(dest => dest.LabelForAddress1, opt => opt.Ignore())
.ForMember(dest => dest.LabelForAddress2, opt => opt.Ignore())
.ForMember(dest => dest.LabelForAddress3, opt => opt.Ignore())
.ForMember(dest => dest.LabelForAddressType, opt => opt.Ignore())
.ForMember(dest => dest.LabelForCity, opt => opt.Ignore())
.ForMember(dest => dest.LabelForCountry, opt => opt.Ignore())
.ForMember(dest => dest.LabelForPostcode, opt => opt.Ignore())
.ForMember(dest => dest.LabelForRegion, opt => opt.Ignore())
.ForMember(dest => dest.Types, opt => opt.Ignore())
.ForMember(dest => dest.Countries, opt => opt.Ignore())
.ForMember(dest => dest.Regions, opt => opt.Ignore())
.ForMember(dest => dest.Country, opt => opt.MapFrom(src => src.Region.Country.Id))
.ForMember(dest => dest.Region, opt => opt.MapFrom(src => src.Region.Id))
.ForMember(dest => dest.Type, opt => opt.MapFrom(src => src.Type.Id))
Mapper.CreateMap<EditAddressViewModel, Address>();
,一次用於EditOrganizationViewModel ..
Mapper.CreateMap<Organization, EditOrganizationViewModel>()
.ForMember(dest => dest.LabelForOrganizationName, opt => opt.Ignore())
.ForMember(dest => dest.LabelForTeamSport, opt => opt.Ignore())
.AfterMap(
(organization, viewModel) =>
MapListItemToViewModel(organization.Phones, viewModel.Phone,
p => p.Type.Name == Resources.BusinessPhone))
.AfterMap(
(organization, viewModel) =>
MapListItemToViewModel(organization.Phones, viewModel.Fax,
p => p.Type.Name == Resources.FaxPhone))
.AfterMap(
(organization, viewModel) =>
MapListItemToViewModel(organization.EmailAddresses, viewModel.EmailAddress,
p => p.Type.Name == Resources.PrimaryEmailAddress));
我建我的觀點模型如下
public EditOrganizationViewModel CreateOrganizationFormViewModel()
{
// Create the organization view model
var viewModel = new EditOrganizationViewModel();
// Load the organization and bind to view model
var organization = _organizationRepository.FindAll().FirstOrDefault();
if (organization == null) organization = new Organization();
// Business Address
viewModel.Address =
AddressManagementService.Instance.CreateEditAddressViewModel(Resources.BusinessAddress);
**At this point my countries list is populated**
// Map the organization to the view model
Mapper.Map(organization, viewModel);
**My countries property is now null after Mapper.Map is called**
}
當我調用Mapper.Map(organization,viewModel)時出現問題。國家名單現在是空的。我不知道如何設置我的映射配置來保存我的列表。我曾嘗試使用valueresolver,但只有組織的地址不爲null時纔會調用它。我討厭不得不真的壓扁我的組織視圖模型幷包含地址信息。任何幫助將不勝感激。
如果還是
UseDestinationValue()完美地工作!我還添加了此映射 .ForMember(dest => dest.Address,opt => opt.Condition(src => src.Address!= null)) .ForMember(dest => dest.Address,opt => opt .MapFrom(src => src.Address)) Thx! – user351479 2011-04-19 05:28:43