Avec AutoMapper, est-il possible de mapper uniquement les propriétés modifiées du modèle de vue à l'objet de domaine? Le problème que je rencontre est que s'il y a des propriétés sur le modèle de vue qui ne sont pas modifiées (null), elles écrasent les objets de domaine et deviennent persistantes dans la base de données.La carte a seulement changé les propriétés?
Répondre
Oui, cela peut être fait, mais vous devez spécifier quand ignorer la propriété de destination en utilisant Condition()
dans votre configuration de mappage.
Voici un exemple. Considérez les classes suivantes:
public class Source
{
public string Text { get; set; }
public bool Map { get; set; }
}
public class Destination
{
public string Text { get; set; }
}
La première carte ne va pas écraser destination.Text
, mais le second.
Mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.Text, opt => opt.Condition(src => src.Map));
var source = new Source { Text = "Do not map", Map = false };
var destination = new Destination { Text = "Leave me alone" };
Mapper.Map(source, destination);
source.Map = true;
var destination2 = new Destination { Text = "I'll be overwritten" };
Mapper.Map(source, destination2);
No.
C'est exactement l'une des raisons pour lesquelles vous ne la carte à partir viewmodel au modèle de domaine. Les modifications de domaine/business model sont trop importantes pour qu'un outil puisse les gérer.
manuellement:
customer.LastName = viewModel.LastName
changement d'état d'affaires est trop importante pour faire autrement.
Oui; J'ai écrit cette méthode d'extension pour mapper uniquement les valeurs sales d'un modèle à Entity Framework.
public static IMappingExpression<TSource, TDestination> MapOnlyIfDirty<TSource, TDestination>(
this IMappingExpression<TSource, TDestination> map)
{
map.ForAllMembers(source =>
{
source.Condition(resolutionContext =>
{
if (resolutionContext.SourceValue == null)
return !(resolutionContext.DestinationValue == null);
return !resolutionContext.SourceValue.Equals(resolutionContext.DestinationValue);
});
});
return map;
}
Exemple:
Mapper.CreateMap<Model, Domain>().MapOnlyIfDirty();
SourceValue n'est pas un membre disponible du fichier de résolution. Qu'est-ce que je rate? – CrusherJoe
Oui, ces membres "SourceValue" et "DestinationValue" ne sont pas disponibles pour moi non plus. – JARRRRG
- 1. Augmente l'événement seulement après que les propriétés dépendantes aient changé la valeur
- 2. php changé les zones de liste seulement
- 3. AvantMAJ pas appelé quand seulement transitoires a changé
- 4. Vérifiez si la date a changé
- 5. La propriété .NET a changé de sensibilité
- 6. vérifier si la chaîne a changé
- 7. textbox a changé d'événement
- 8. Entity Framework - Charger seulement les propriétés sélectionnées
- 9. Déterminer quand un objet a seulement certaines propriétés
- 10. si spinner a changé
- 11. liste déroulante a changé
- 12. rafraîchir seulement si changé php-ajax
- 13. Comment notifier toutes les propriétés du modèle de vue a changé
- 14. La photothèque iOS a totalement changé
- 15. Carte Android montrant seulement les tuiles
- 16. nhibernate pour enregistrer seulement les propriétés requises
- 17. La date du système a changé d'événement
- 18. pourquoi la couleur de l'image a changé
- 19. La valeur de l'argument pthread a changé
- 20. La géolocalisation montre seulement la carte globale
- 21. question sur les contrôles de Windows a changé d'événement
- 22. Slickgrid - obtenir seulement mis à jour/changé les colonnes
- 23. pourquoi dbml a changé les noms de relation des tables?
- 24. La valeur passée dans pthread_create a changé
- 25. La position du curseur a changé d'événement
- 26. la sélection a changé l'événement dans DataGridComboBoxColumn
- 27. notification AJAX lorsque la page a changé
- 28. comment déplacer cercle comme ma position a changé la carte Google Android
- 29. Windows Azure web.config a changé
- 30. Knockoutjs checkbox a changé d'événement
Quoi? Je pensais que c'était exactement pour ça? Veuillez expliquer comment vous transformez vos objets de domaine en modèles de vue. – Sam
Ce que je voulais dire dans ce qui précède était comment vous obtenez vos modèles d'édition/affichage à vos objets de domaine? – Sam
Faites-vous cela dans vos contrôleurs? – Sam