【问题标题】:How to create mapping using automapper for this complex object which contains member functions?如何使用自动映射器为这个包含成员函数的复杂对象创建映射?
【发布时间】:2016-11-04 18:25:42
【问题描述】:

下面要转换的函数是automapper

public ActionResult Index()
    {
        Func<int,string> _roleName=t=>{return new RolesDAO().getROLEsByID(t).ROLE_NAME; };
        Func<int,string> _STATENAME=t=>{return new StateDAO().getStatesByID(t).STATENAME; };
        Func<int,string> _COUNTRYNAME=t=>{return new CountryDAO().getCountrieByID(t).COUNTRYNAME; };
        //Func<int,string> _TYPE_NAME=t=>{return new UsersTypeDAO().getUsersTypeByID(t).TYPE_NAME; };

        string usertypeName = string.Empty; 
        string RoleName = string.Empty;
        string StateName = string.Empty;
        string CountryName = string.Empty;
        var value = objDAO.getUsers().Select(t => new UsersVM
        { 
          ACTIVE=t.ACTIVE,
           ROLENAME=_roleName(t.ROLEID),
            PROFILE_IMAGE=t.PROFILE_IMAGE,
          STATEName = _STATENAME(t.STATE),
          COUNTRYName = _COUNTRYNAME(t.COUNTRY),
           MOBILE=t.MOBILE,
            FNAME=t.FNAME,
            LNAME=t.LNAME,
             EMAIL=t.EMAIL,
              CITY=t.CITY,
          USERTYPENAME = _TypeName(t.USER_TYPE_ID),
           ADDRESS=t.ADDRESS,
        }).ToList();

        return View("list", value);
    }

我使用自动映射器函数调用成员但没有成功,我什至无法使用断点进行调试。请建议如何将此对象转换为另一个对象。我查看了许多博客文章,但无法将其与我的问题联系起来。

我只想使用自动映射器进行此转换,而不是创建匿名类型并在其中使用函数。

我尝试使用 .forMember 函数,但它无法为转换后的属性返回 null。这是我的个人资料类:

 public class UsersDM_TO_VM : Profile
{
    public UsersDM_TO_VM()
    {
        Func<int,string> _roleName=t=>{return new RolesDAO().getROLEsByID(t).ROLE_NAME; };
        Func<int,string> _STATENAME=t=>{return new StateDAO().getStatesByID(t).STATENAME; };
        Func<int,string> _COUNTRYNAME=t=>{return new CountryDAO().getCountrieByID(t).COUNTRYNAME; };
        Func<int,string> _TYPE_NAME=t=>{return new UsersTypeDAO().getUsersTypeByID(t).TYPE_NAME; };
        CreateMap<STBL_ADMINUSERS, UsersVM>()
            .ForMember(
            a => a.STATEName,
            b => b.MapFrom(c => _STATENAME(c.STATE)))
            .ForMember(
            d => d.ROLENAME,
            e => e.MapFrom(f => _roleName(f.STATE)))
             .ForMember(
            g => g.COUNTRYName,
            h => h.MapFrom(i => _COUNTRYNAME(i.STATE)))
             .ForMember(
            j => j.USERTYPENAME,
            k => k.MapFrom(l => _TYPE_NAME(l.STATE)));

    }
}

但是,它没有给出任何错误,而是给出了意外的结果。自定义类型转换器也没有成功。

public class CustomUserConverter : ITypeConverter<STBL_ADMINUSERS, UsersVM>
{
    Func<int, string> _roleName = t => { return new RolesDAO().getROLEsByID(t).ROLE_NAME; };
    Func<int, string> _STATENAME = t => { return new StateDAO().getStatesByID(t).STATENAME; };
    Func<int, string> _COUNTRYNAME = t => { return new CountryDAO().getCountrieByID(t).COUNTRYNAME; };
    Func<int, string> _TYPE_NAME = t => { return new UsersTypeDAO().getUsersTypeByID(t).TYPE_NAME; };

    public UsersVM Convert(STBL_ADMINUSERS s, ResolutionContext c)
    {
        UsersVM t = new UsersVM();
        t.ROLENAME = _roleName(s.ROLEID);
        t.COUNTRYName = _COUNTRYNAME(s.COUNTRY);
        t.STATEName = _STATENAME(s.STATE);
        t.USERTYPENAME = _TYPE_NAME(s.USER_TYPE_ID);
        return t;
    }
}

【问题讨论】:

    标签: c# asp.net-mvc automapper


    【解决方案1】:

    您想使用自定义类型转换器。类型转换器将允许您完全控制 AutoMapper 如何从源类型映射到目标类型。

    Custom Type Converters

    【讨论】:

    • a 试图理解该示例,但我无法理解,您能否解释一下它如何使用自定义转换器来处理至少一个属性 ROLENAME=_roleName(t.ROLEID) ..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 2020-05-12
    • 2016-06-14
    • 1970-01-01
    相关资源
    最近更新 更多