Modèle d'entité
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; }
}
Voir le modèle
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());
Carte
[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);
}
}
Et erreur
Configuration de mappe de type manquante ou mappage non pris en charge. Il y a eu beaucoup de changements dans les cartouches
Chemin de destination: Categoies_7314E98C41152985A4218174DDDF658046BC82AB0ED9E1F0440514D79052F84D
Valeur source: NewsCMS.Areas.Admin.Models.CategoriesViewModel
Qu'est-ce que je rate? J'essaie de trouver, mais je ne vois pas le problème.
MISE À JOUR
J'ai spécifié dans application_start dans 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());
}
}
J'ai trouvé la solution, Merci à tous pour la réponse.
category = (Categoies)AutoMapper.Mapper.Map(viewModel, category, typeof(CategoriesViewModel), typeof(Categoies));
Mais, je ne sais déjà pas la raison. Je ne peux pas comprendre pleinement.
Où avez-vous spécifié le code de mappage (CreateMap)? Référence: Où dois-je configurer AutoMapper?
Si vous utilisez la méthode static Mapper, la configuration ne doit avoir lieu qu'une fois par AppDomain. Cela signifie que le meilleur endroit pour insérer le code de configuration est le démarrage de l'application, tel que le fichier Global.asax pour les applications ASP.NET.
Si la configuration n'est pas enregistrée avant d'appeler la méthode Map, vous recevrez Missing type map configuration or unsupported mapping.
Dans votre profil de classe AutoMapper
, vous devez créer une carte pour votre entité et un modèle de vue.
C'est habituellement dans AutoMapper/DomainToViewModelMappingProfile
Dans Configure()
, ajoutez une ligne comme
Mapper.CreateMap<YourEntityViewModel, YourEntity>();
Dans ViewModelToDomainMappingProfile
, ajoutez:
Mapper.CreateMap<YourEntity, YourEntityViewModel>();
Remarquez le Categoies_7314E98C41152985A4218174DDDF658046BC82AB0ED9E1F0440514D79052F84D
classe dans l'exception? C'est un proxy Entity Framework. Je vous recommanderais de supprimer votre contexte EF pour vous assurer que tous vos objets sont chargés avec impatience à partir de la base de données et qu'aucun proxy de ce type n'existe:
[HttpPost]
public ActionResult _EditCategory(CategoriesViewModel viewModel)
{
Categoies category = null;
using (var ctx = new MyentityFrameworkContext())
{
category = ctx.Categoies.Find(viewModel.Id);
}
AutoMapper.Mapper.Map<CategoriesViewModel, Categoies>(viewModel, category);
//category = AutoMapper.Mapper.Map<CategoriesViewModel, Categoies>(viewModel, category);
entity.SaveChanges();
}
Si la récupération d'entité est effectuée à l'intérieur d'une couche d'accès aux données (ce qui bien sûr est le bon moyen), assurez-vous de disposer de votre contexte EF avant de renvoyer des instances à partir de votre DAL.
Je l'ai fait pour supprimer l'erreur:
Mapper.CreateMap<FacebookUser, ProspectModel>();
prospect = Mapper.Map(prospectFromDb, prospect);
Vérifiez votre fichier Global.asax.cs et assurez-vous que cette ligne existe
AutoMapperConfig.Configure();
Mettez à niveau Automapper vers la version 6.2.2. Ça m'a aidé
Je sais que la question est plutôt ancienne pour l’instant, mais j’avais trouvé la bonne solution, c’était de ne pas déclarer l’attribut Assembly.
Mon code est:
using AutoMapper;
...
namespace [...].Controllers
{
public class HousingTenureTypesController : LookupController<HousingTenureType, LookupTypeModel>
{
Mapper.CreateMap<HousingTenureType, LookupTypeModel>().ReverseMap();
}
...
}
Ceci a été corrigé en ajoutant la ligne suivante avant ma déclaration d'espace de noms:
[Assembly: WebActivatorEx.PreApplicationStartMethod(typeof(HousingTenureTypesController), "AutoMapperStart")]
Le code complet est:
using AutoMapper;
...
[Assembly: WebActivatorEx.PreApplicationStartMethod(typeof(HousingTenureTypesController), "AutoMapperStart")]
namespace [...].Controllers
{
public class HousingTenureTypesController : LookupController<HousingTenureType, LookupTypeModel>
{
Mapper.CreateMap<HousingTenureType, LookupTypeModel>().ReverseMap();
}
...
}