将字符串值转换为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