【问题标题】:Convert a string value to an entity in Automapper在 Automapper 中将字符串值转换为实体
【发布时间】:2011-06-22 19:44:00
【问题描述】:

我试图弄清楚当我的实体具有实体类型的字段时如何使用 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; }
}

在我的视图模型中,我定义了一个字符串类型的字段 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 无法弄清楚如何将我的公司(字符串)转换为公司类型的对象,即联系人的成员。 是否可以定义一个规则,以便 Automapper 知道如何将字符串(公司)转换为我的公司对象的代码,即联系人的成员?

【问题讨论】:

    标签: viewmodel automapper


    【解决方案1】:

    您需要使用解析器。比如:

    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))
    

    【讨论】:

    • 这就是我想要的。谢谢。
    猜你喜欢
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多