我浏览了各种类似的帖子,但无法发现我的方式错误。基本上我有两个视图来更新“设置”对象的不同部分。视图模型包含两个属性之一,并且根据正在设置的属性,应该忽略另一个。当它是 ViewModel ==> Entity direct 但当 Automapper 尝试更新嵌套对象时它会失败。
我有以下对象结构:
public class Account
{
public int AccountId { get; set; }
public DateTime DateToBeIgnored { get; set; }
public AccountSetting Settings { get; set; }
}
public class AccountSetting
{
public string PropertyOne { get; set; }
public string PropertyTwo { get; set; }
}
public class AccountViewModel
{
public int AccountId { get; set; }
public DateTime DateToBeIgnored { get; set; }
public AccountSettingViewModel Settings { get; set; }
}
public class AccountSettingViewModel
{
public string PropertyTwo { get; set; }
}
public class OtherAccountSettingViewModel
{
public string PropertyOne { get; set; }
}
使用映射:
void WireUpMappings()
{
// From the entities to the view models
Mapper.CreateMap<Account, AccountViewModel>();
Mapper.CreateMap<AccountSetting, AccountSettingViewModel>();
Mapper.CreateMap<AccountSetting, OtherAccountSettingViewModel>();
// From the view models to the entities
Mapper.CreateMap<AccountViewModel, Account>()
.ForMember(dest => dest.DateToBeIgnored, opt => opt.Ignore());
Mapper.CreateMap<AccountSettingViewModel, AccountSetting>()
.ForMember(dest => dest.PropertyTwo, opt => opt.Ignore());
Mapper.CreateMap<OtherAccountSettingViewModel, AccountSetting>()
.ForMember(dest => dest.PropertyOne, opt => opt.Ignore());
Mapper.AssertConfigurationIsValid();
}
映射 [OtherAccountSettingViewModel --> AccountSetting] 时,仅分配属性“PropertyTwo”(并且“PropertyOne”的原始值保持不变)-这是我所期望的。
但是,当映射 [AccountViewModel --> Account] 时,“DateToBeIgnored”会按预期被忽略,而 Account.AccountSetting.PropertyTwo 的先前值被替换为“null”。
谁能发现我的方式的错误?