将字符串值转换为Automapper中的实体
我想知道当我的实体有一个实体类型的字段时如何使用Automapper。
我有3个这样的课程:
public abstract class Entity<IdK>
{
public virtual IdK Code { get; protected set; }
}
public class Contact : Entity
{
public virtual string Name { get; set; }
public virtual Company Company { get; set; }
}
public class Company : Entity
{
public virtual string Name { get; set; }
}
我的类Contact包含一个Company类型的元素。
我还创建了一个ViewModel来将一些信息转移到我的视图中:
public ContactViewModel()
{
public Guid Code { get; set; }
public int Version { get; set; }
[DisplayName("Contact")]
public string Name { get; set; }
[DisplayName("Company")]
public string Company { get; set; }
}
在我的viewmodel中,我定义了一个string类型的字段Company。 这将包含用户从下拉列表(公司列表)中选择的值。
我的应用程序启动时我定义了一个引导程序:
public class AutoMapperConfiguration
{
public static void Configure()
{
Mapper.Initialize(x => {
x.CreateMap<Domain.Contact, ViewModels.ContactViewModel>();
x.CreateMap<ViewModels.ContactViewModel, Domain.Contact>()
});
}
}
当我尝试将我的ViewModel重新映射到实体时,出现转换错误(AutoMapper.AutoMapperMappingException)。 Automapper无法弄清楚如何将我的公司(字符串)转换为类型为Company,Contact成员的对象。 是否有可能定义一个规则,以便Automapper知道如何将字符串(公司)转换为我公司对象的代码,即联系人的成员?
你需要使用一个Resolver。 就像是:
public class CompanyTypeResolver : ValueResolver<string, Company>
{
protected override Company ResolveCore(string name)
{
return new Company {Name = name};
}
}
然后在映射代码时,你会这样称呼它:
.ForMember(dto => dto.Company, opt => opt.ResolveUsing<CompanyTypeResolver>().FromMember(src => src.Name))
链接地址: http://www.djcxy.com/p/37421.html
上一篇: Convert a string value to an entity in Automapper
下一篇: Updating to Automapper v5 has error with .NullSubstitute