Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Automapper missing type map configuration or unsupported mapping - Error

Entity Model

public partial class Categoies {     public Categoies()     {         this.Posts = new HashSet<Posts>();     }      public int Id { get; set; }     public string Name { get; set; }     public string Description { get; set; }     public Nullable<int> PositionId { get; set; }      public virtual CategoryPositions CategoryPositions { get; set; }     public virtual ICollection<Posts> Posts { get; set; } } 

View Model

public class CategoriesViewModel {     public int Id { get; set; }      [Required(ErrorMessage = "{0} alanı boş bırakılmamalıdır!")]     [Display(Name = "Kategori Adı")]     public string Name { get; set; }      [Display(Name = "Kategori Açıklama")]     public string Description { get; set; }      [Display(Name = "Kategori Pozisyon")]     [Required(ErrorMessage="{0} alanı boş bırakılmamalıdır!")]     public int PositionId { get; set; } } 

CreateMap

Mapper.CreateMap<CategoriesViewModel, Categoies>()             .ForMember(c => c.CategoryPositions, option => option.Ignore())             .ForMember(c => c.Posts, option => option.Ignore()); 

Map

[HttpPost] public ActionResult _EditCategory(CategoriesViewModel viewModel) {     using (NewsCMSEntities entity = new NewsCMSEntities())     {         if (ModelState.IsValid)         {             try             {                 category = entity.Categoies.Find(viewModel.Id);                 AutoMapper.Mapper.Map<CategoriesViewModel, Categoies>(viewModel, category);                 //category = AutoMapper.Mapper.Map<CategoriesViewModel, Categoies>(viewModel);                 //AutoMapper.Mapper.Map(viewModel, category);                 entity.SaveChanges();                  // Veritabanı işlemleri başarılı ise yönlendirilecek sayfayı                  // belirleyip ajax-post-success fonksiyonuna gönder.                 return Json(new { url = Url.Action("Index") });             }             catch (Exception ex)             {              }         }          // Veritabanı işlemleri başarısız ise modeli tekrar gönder.         ViewBag.Positions = new SelectList(entity.CategoryPositions.ToList(), "Id", "Name");         return PartialView(viewModel);     } } 

Error

Missing type map configuration or unsupported mapping. Mapping types: CategoriesViewModel -> Categoies_7314E98C41152985A4218174DDDF658046BC82AB0ED9E1F0440514D79052F84D NewsCMS.Areas.Admin.Models.CategoriesViewModel -> System.Data.Entity.DynamicProxies.Categoies_7314E98C41152985A4218174DDDF658046BC82AB0ED9E1F0440514D79052F84D

Destination path: Categoies_7314E98C41152985A4218174DDDF658046BC82AB0ED9E1F0440514D79052F84D

Source value: NewsCMS.Areas.Admin.Models.CategoriesViewModel

What am I missing? I try to find, but I cant see problem.

UPDATE

I have specified in application_start in Global.asax

protected void Application_Start() {     InitializeAutoMapper.Initialize(); } 

InitializeClass

public static class InitializeAutoMapper {     public static void Initialize()     {         CreateModelsToViewModels();         CreateViewModelsToModels();     }      private static void CreateModelsToViewModels()     {         Mapper.CreateMap<Categoies, CategoriesViewModel>();     }      private static void CreateViewModelsToModels()     {         Mapper.CreateMap<CategoriesViewModel, Categoies>()             .ForMember(c => c.CategoryPositions, option => option.Ignore())             .ForMember(c => c.Posts, option => option.Ignore());     } } 
like image 314
AliRıza Adıyahşi Avatar asked Feb 03 '13 22:02

AliRıza Adıyahşi


2 Answers

Where have you specified the mapping code (CreateMap)? Reference: Where do I configure AutoMapper?

If you're using the static Mapper method, configuration should only happen once per AppDomain. That means the best place to put the configuration code is in application startup, such as the Global.asax file for ASP.NET applications.

If the configuration isn't registered before calling the Map method, you will receive Missing type map configuration or unsupported mapping.

like image 145
Martin4ndersen Avatar answered Oct 13 '22 21:10

Martin4ndersen


In your class AutoMapper profile, you need to create a map for your entity and viewmodel.

ViewModel To Domain Model Mappings:

This is usually in AutoMapper/DomainToViewModelMappingProfile

In Configure(), add a line like

Mapper.CreateMap<YourEntityViewModel, YourEntity>(); 

Domain Model To ViewModel Mappings:

In ViewModelToDomainMappingProfile, add:

Mapper.CreateMap<YourEntity, YourEntityViewModel>(); 

Gist example

like image 29
Pierry Avatar answered Oct 13 '22 21:10

Pierry