首页 > 解决方案 > Automapper 映射异常:缺少类型映射配置或不支持的映射

问题描述

我正在使用 ASP.NET MVC 和 Automapper。我试图解决这个问题,我无法通过这段代码将数据插入数据库,如果我使用 SQL Server 插入数据,错误(Automapper 映射异常)即将到来。

错误

我怎么解决这个问题?

控制器代码:

public class SERVICESController : Controller
{
    private readonly IMapper mapper;
    private readonly Calssifications1 calssificationInterface;
    private readonly CATEGORIES categorisInterface;
    private readonly CHANNELS1 channelsInterface;
    private readonly Level LEVELInterface;
    private readonly User userInterface;
    private readonly Services1 serviceInterface;

    // GET: SERVICES
    public SERVICESController()
    {
        mapper = AutoMapperConfig.Mapper;
        calssificationInterface = new Calssifications1();
        categorisInterface = new CATEGORIES();
        channelsInterface = new CHANNELS1();
        LEVELInterface = new Level();
        userInterface = new User();
        serviceInterface = new Services1();
    }
    
    //index
    public ActionResult Index(string query = null,
        int? CATID = null,
        int? TYPID = null,
        int? CLASSID = null,
        int? LEVELID = null,
        int? CHANNELID = null)
    {
        var serviceListData = new ServiceListModel();
        InitSelectList(ref serviceListData);
        var serviceList = serviceInterface.ReadAll(query, CATID, TYPID,
        CLASSID, LEVELID, CHANNELID);

        var mappedServiceList = mapper.Map<List<SERVICESmodel>>(serviceList);
        serviceListData.SERVICEs = mappedServiceList;
        
        return View(serviceListData);
    }

    //create function
    public ActionResult Create()
    {
        var serviceModel = new SERVICESmodel();

        InitSelectList(ref serviceModel);
        return View(serviceModel);
    }
    
    [HttpPost]
    public ActionResult Create(SERVICESmodel serviceData)
    {
        InitSelectList(ref serviceData);
        try
        {
            if (ModelState.IsValid)
            {
                serviceData.MANUAL = SaveManualFile(serviceData.MANUALfile);

                var STO = mapper.Map<SERVICE_ALL>(serviceData);
                STO.CATEGORy = null;
                STO.USER_TYPE = null;
                STO.CALSSIFICATION = null;
                STO.MATURITY_LEVEL = null;
                STO.CHANNEL = null;           
               
                int result = serviceInterface.Create(STO);

                if (result >= 1)
                {
                    return RedirectToAction("Index");
                }
                ViewBag.Message = "An Error ";
            }
            return View(serviceData);
        }
        catch (Exception ex)
        {
            ViewBag.Message = ex.Message;
            return View(serviceData);
        }           
    }
    
    //function servicemodel 
    private void InitSelectList(ref SERVICESmodel serviceModel)
    {
        var mappedCategriesList = GetCategories();
        serviceModel.Categories = new SelectList(mappedCategriesList, "ID", "NAME");

        var mappedUserlList = GetUser();
        serviceModel.UserType = new SelectList(mappedUserlList, "ID", "NAME");

        var mappedLevellList = GetLevel();
        serviceModel.Level = new SelectList(mappedLevellList, "ID", "NAME");

        var mappedClasslList = GetClass();
        serviceModel.Class = new SelectList(mappedClasslList, "ID", "NAME");

        var mappedChannelList = GetChannel();
        serviceModel.Channel = new SelectList(mappedChannelList, "ID", "NAME");   
    }
    
    //function servise list model
    private void InitSelectList(ref ServiceListModel serviceList)
    {
        var mappedCategoriesList = GetCategories();
        serviceList.Categories = new SelectList(mappedCategoriesList, "ID", "Name");

        var mappedLevelList = GetLevel();
        serviceList.Level = new SelectList(mappedLevelList, "ID", "Name");

        var mappedChannelList = GetChannel();
        serviceList.Channel = new SelectList(mappedChannelList, "ID", "Name");

        var mappedUserlList = GetUser();
        serviceList.UserType = new SelectList(mappedUserlList, "ID", "Name");

        var mappedClassList = GetClass();
        serviceList.Class = new SelectList(mappedClassList, "ID", "Name");
    }

    private IEnumerable<CATEGORIESmodel> GetCategories()
    {
        var categories = categorisInterface.ReadAll();
        return mapper.Map<IEnumerable<CATEGORIESmodel>>(categories);
    }

    private IEnumerable<MATURITY_LEVELmodel> GetLevel()
    {
        var Levels = LEVELInterface.ReadAll();
        return mapper.Map<IEnumerable<MATURITY_LEVELmodel>>(Levels);
    }
    private IEnumerable<CHANNELSmodel> GetChannel()
    {
        var Channels1 = channelsInterface.ReadAll();
        return mapper.Map<IEnumerable<CHANNELSmodel>>(Channels1);
    }

    private IEnumerable<USER_TYPEmodel> GetUser()
    {
        var Users = userInterface.ReadAll();
        return mapper.Map<IEnumerable<USER_TYPEmodel>>(Users);
    }

    private IEnumerable<CALSSIFICATIONmodel> GetClass()
    {
        var Classes = calssificationInterface.ReadAll();
        return mapper.Map<IEnumerable<CALSSIFICATIONmodel>>(Classes);
    }
    
    // Function save file
    private string SaveManualFile(HttpPostedFileBase MANUALfile, string currentFile = "")
    {
        if (MANUALfile != null)
        {
            var fileExtenstion = Path.GetExtension(MANUALfile.FileName);
            var imageGuid = Guid.NewGuid().ToString();

            string imageId = imageGuid + fileExtenstion;

            // Save new file
            string filePath = Server.MapPath($"~/Upload/{imageId}");
            MANUALfile.SaveAs(filePath);

            // Delete old file - update action
            if (!string.IsNullOrEmpty(currentFile))
            {
                string oldFilePath = Server.MapPath($"~/Upload/{currentFile}");
                System.IO.File.Delete(oldFilePath);
            }

            return imageId;
        }
        return currentFile;
    }
}

模型:

public class SERVICESmodel
{
    public int ID { get; set; }
    [Required]   
    public int CAT_ID { get; set; }
    [Required]
    [Display(Name = "Category")]
    public string catName { get; set; }
    [Required]  
    public int TYP_ID { get; set; }
    [Required]
    [Display(Name = "User")]
    public string typName { get; set; }
    [Required]   
    public int CLASS_ID { get; set; }
    [Required]
    [Display(Name = "CLASS")]
    public string ClassName { get; set; }
    [Required]  
    public int LEVEL_ID { get; set; }
    [Required]
    [Display(Name = "LEVEL")]
    public string levelName { get; set; }
    [Required]
    public int CHANNEL_ID { get; set; }
    [Required]
    [Display(Name = "CHANNE")]
    public string channelName { get; set; }     
    [Required]
    [Display(Name = "NAME")]
    public string NAME { get; set; }
    [Required]
    [Display(Name = "DESC")]
    public string DESC { get; set; }
    public bool SRVC_FEES { get; set; }
    [Url(ErrorMessage = "Please, enter correct url!")]
    public string SRVC_LINK { get; set; }
    public bool SRVC_STS { get; set; }  
    public System.DateTime CREATED_DATE { get; set; }
    public System.DateTime MODIFY_DATE { get; set; }
    public string MANUAL { get; set; }
    public HttpPostedFileBase MANUALfile { get; set; }

    public SelectList Categories { get; set; }
    public SelectList UserType { get; set; }
    public SelectList Level { get; set; }
    public SelectList Channel { get; set; }
    public SelectList Class { get; set; }
}

public class ServiceListModel
{
    public IEnumerable<SERVICESmodel> SERVICEs { get; set; }
    public string Query { get; set; }   
    [Display(Name = "Category")]
    public int CATID { get; set; }
    [Display(Name = "User")]
    public int TYPID { get; set; }
    [Display(Name = "CLASS")]
    public int CLASSID { get; set; }  
    [Display(Name = "LEVEL")]
    public int LEVELID { get; set; } 
    [Display(Name = "CHANNEL")]
    public int CHANNELID { get; set; }

    public SelectList Categories { get; set; }
    public SelectList UserType { get; set; }
    public SelectList Class { get; set; }
    public SelectList Level { get; set; }   
    public SelectList Channel { get; set; }        
}

自动映射器:

public static class AutoMapperConfig
{   
    public static IMapper Mapper { get; private set; }
    
    public static void Init()
    {
        var config = new MapperConfiguration(cfg =>
        {
            //category mapper
            cfg.CreateMap<CATEGORy, CATEGORIESmodel>()
               .ForMember(dst => dst.ID, src => src.MapFrom(e => e.ID))
               .ForMember(dst => dst.NAME, src => src.MapFrom(e => e.CAT_NAME))
            .ReverseMap();

            // classification mapper
            cfg.CreateMap<CALSSIFICATION, CALSSIFICATIONmodel>()
               .ForMember(dst => dst.ID, src => src.MapFrom(e => e.ID))
               .ForMember(dst => dst.NAME, src => src.MapFrom(e => e.CLASS_NAME))
            .ReverseMap();
            //channel mapper
            cfg.CreateMap<CHANNEL, CHANNELSmodel>()
               .ForMember(dst => dst.ID, src => src.MapFrom(e => e.ID))
               .ForMember(dst => dst.NAME, src => src.MapFrom(e => e.CHANNEL_NAME))
            .ReverseMap();

            //MATURITY_LEVEL mapper
            cfg.CreateMap<MATURITY_LEVEL, MATURITY_LEVELmodel>()
              .ForMember(dst => dst.ID, src => src.MapFrom(e => e.ID))
              .ForMember(dst => dst.NAME, src => src.MapFrom(e => e.LEVEL_NAME))
            .ReverseMap();
            //user_type mapper
            cfg.CreateMap<USER_TYPE, USER_TYPEmodel>()
               .ForMember(dst => dst.ID, src => src.MapFrom(e => e.ID))
               .ForMember(dst => dst.NAME, src => src.MapFrom(e => e.TYP_NAME))
            .ReverseMap();
            // Services mapper

            cfg.CreateMap<SERVICE_ALL, SERVICESmodel>()
                .ForMember(dst => dst.ID, src => src.MapFrom(e => e.ID))
                .ForMember(dst => dst.catName, src => src.MapFrom(e => e.CATEGORy.CAT_NAME))
                .ForMember(dst => dst.typName, src => src.MapFrom(e => e.USER_TYPE.TYP_NAME))
                .ForMember(dst => dst.levelName, src => src.MapFrom(e => e.MATURITY_LEVEL.LEVEL_NAME))
                .ForMember(dst => dst.ClassName, src => src.MapFrom(e => e.CALSSIFICATION.CLASS_NAME))
                .ForMember(dst => dst.channelName, src => src.MapFrom(e => e.CHANNEL.CHANNEL_NAME))
                .ForMember(dst => dst.NAME, src => src.MapFrom(e => e.SRVC_NAME))
                .ForMember(dst => dst.DESC, src => src.MapFrom(e => e.SRVC_DESC))
             .ReverseMap();
        });
        
        Mapper = config.CreateMapper();
    }
}

服务接口:

public interface IServices1
{
    int Create(SERVICE_ALL service);
    List<SERVICE_ALL> ReadAll
        (string query = null,
        int ? CATID = null, 
        int? TYPID = null,
        int? CLASSID= null,
        int? LEVELID = null , int? CHANNELID =null);

    SERVICE_ALL Get(int Id);
}

public class Services1 : IServices1
{
    private readonly EservicesEntities1 db;

    public Services1()
    {
        db = new EservicesEntities1();
    }
    public int Create(SERVICE_ALL service)
    {
        service.CREATED_DATE = DateTime.Now;
        db.SERVICE_ALL.Add(service);
        return db.SaveChanges();
    }
    public SERVICE_ALL Get(int Id)
    {
        return db.SERVICE_ALL.Find(Id);
    }

    public List<SERVICE_ALL> ReadAll(string query = null,
        int? CATID = null,
        int? TYPID = null,
        int? CLASSID = null,
         int? LEVELID = null
       ,int? CHANNELID = null)
    {
        return db.SERVICE_ALL.Where(c =>(CATID == null || c.CAT_ID == CATID)
                      && (TYPID == null || c.TYP_ID == TYPID)
                      &&(CLASSID == null || c.CLASS_ID == CLASSID)
                      &&(LEVELID == null || c.LEVEL_ID == LEVELID)
                      &&(CHANNELID == null || c.CHANNEL_ID == CHANNELID)
                      && (query == null || c.SRVC_NAME.Contains(query))).ToList();
    }
}

标签: asp.netsql-servermodel-view-controllerautomapper

解决方案


推荐阅读