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()); } }
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.
In your class AutoMapper
profile, you need to create a map for your entity and viewmodel.
This is usually in AutoMapper/DomainToViewModelMappingProfile
In Configure()
, add a line like
Mapper.CreateMap<YourEntityViewModel, YourEntity>();
In ViewModelToDomainMappingProfile
, add:
Mapper.CreateMap<YourEntity, YourEntityViewModel>();
Gist example
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With