¿Falta la configuración del mapa de tipos de Automapper o la asignación no compatible?

Modelo de entidad

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

Ver modelo

 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() .ForMember(c => c.CategoryPositions, option => option.Ignore()) .ForMember(c => c.Posts, option => option.Ignore()); 

Mapa

 [HttpPost] public ActionResult _EditCategory(CategoriesViewModel viewModel) { using (NewsCMSEntities entity = new NewsCMSEntities()) { if (ModelState.IsValid) { try { category = entity.Categoies.Find(viewModel.Id); AutoMapper.Mapper.Map(viewModel, category); //category = AutoMapper.Mapper.Map(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); } } 

Y error

Falta la configuración del mapa de tipo o la asignación no compatible. Tipos de correlación: CategoríasViewModel -> Categoies_7314E98C41152985A4218174DDDF658046BC82AB0ED9E1F0440514D79052F84D NewsCMS.Areas.Admin.Models.CategoriesViewModel -> System.Data.Entity.DynamicProxies.Categoies_7314E98C41152985A4218174DDDF658046BC82AB0ED9E1F0440514D79052F84D

Ruta de destino: Categoies_7314E98C41152985A4218174DDDF658046BC82AB0ED9E1F0440514D79052F84D

Valor de origen: NewsCMS.Areas.Admin.Models.CategoriesViewModel

¿Qué me estoy perdiendo? Intento buscar, pero no puedo ver el problema.

ACTUALIZAR

He especificado en application_start en 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(); } private static void CreateViewModelsToModels() { Mapper.CreateMap() .ForMember(c => c.CategoryPositions, option => option.Ignore()) .ForMember(c => c.Posts, option => option.Ignore()); } } 

Gracias.

¿Dónde ha especificado el código de mapeo (CreateMap)? Referencia: ¿Dónde configuro AutoMapper?

Si está utilizando el método de Mapper estático, la configuración solo debería ocurrir una vez por AppDomain. Eso significa que el mejor lugar para poner el código de configuración es en el inicio de la aplicación, como el archivo Global.asax para aplicaciones ASP.NET.

Si la configuración no está registrada antes de llamar al método Map, recibirá la Missing type map configuration or unsupported mapping.

Observe la clase Categoies_7314E98C41152985A4218174DDDF658046BC82AB0ED9E1F0440514D79052F84D en la excepción? Es un proxy de Entity Framework. Le recomendaría que se deshaga de su contexto EF para asegurarse de que todos sus objetos se carguen ansiosamente de la base de datos y que no existan dichos proxies:

 [HttpPost] public ActionResult _EditCategory(CategoriesViewModel viewModel) { Categoies category = null; using (var ctx = new MyentityFrameworkContext()) { category = ctx.Categoies.Find(viewModel.Id); } AutoMapper.Mapper.Map(viewModel, category); //category = AutoMapper.Mapper.Map(viewModel, category); entity.SaveChanges(); } 

Si la recuperación de la entidad se realiza dentro de una capa de acceso a datos (que, por supuesto, es la forma correcta), asegúrese de disponer de su contexto EF antes de devolver instancias de su DAL.

En su perfil de AutoMapper su clase, necesita crear un mapa para su entidad y modelo de vista.

Maquetas de modelos de ViewModel to Domain:

Esto suele ser en AutoMapper/DomainToViewModelMappingProfile

En Configure() , agregue una línea como

 Mapper.CreateMap(); 

Modelo de dominio para las asignaciones de ViewModel:

En ViewModelToDomainMappingProfile , agregue:

 Mapper.CreateMap(); 

Ejemplo de Gist

Hice esto para eliminar el error:

 Mapper.CreateMap(); prospect = Mapper.Map(prospectFromDb, prospect); 

Verifique su archivo Global.asax.cs y asegúrese de que esta línea esté allí

  AutoMapperConfig.Configure(); 

Encontré la solución. Gracias a todos por la respuesta.

 category = (Categoies)AutoMapper.Mapper.Map(viewModel, category, typeof(CategoriesViewModel), typeof(Categoies)); 

Pero, ya no sé la razón. No puedo entender completamente.

Sé que esta es una pregunta bastante antigua a partir de ahora, pero había encontrado que la solución adecuada era que no estaba declarando el atributo de ensamblaje.

Mi código es:

 using AutoMapper; ... namespace [...].Controllers { public class HousingTenureTypesController : LookupController { Mapper.CreateMap().ReverseMap(); } ... } 

Esto se solucionó agregando la siguiente línea antes de la statement de mi espacio de nombres:

 [assembly: WebActivatorEx.PreApplicationStartMethod(typeof(HousingTenureTypesController), "AutoMapperStart")] 

El código completo es:

 using AutoMapper; ... [assembly: WebActivatorEx.PreApplicationStartMethod(typeof(HousingTenureTypesController), "AutoMapperStart")] namespace [...].Controllers { public class HousingTenureTypesController : LookupController { Mapper.CreateMap().ReverseMap(); } ... } 

Actualice Automapper a la versión 6.2.2. Me ayudó