11
votes

Comment automabuler cela (Mappage des membres)

J'ai quelque chose comme ça xxx

J'ai un domaine comme celui-ci xxx

maintenant je dois faire la cartographie.

// dans mon contrôleur xxx

Ceci ne liera rien puisqu'il ne pouvait pas comprendre comment mettre le productidit puisque est xxx

Ma carte est comme celle-ci xxx

i obtenir cette erreur

expression 'dest => Convertir (Dest.Product.SelectedProductid 'doit résoudre au membre de niveau supérieur. Paramètre Nom: LambdaExpression

Je ne sais pas comment faire cela.


4 commentaires

Pouvez-vous réparer votre code? Vous avez beaucoup d'erreurs là-bas. Par exemple, Classe publique MyTest () n'est pas une déclaration de classe valide et public myTest () {obtenir; ensemble;} n'est pas une déclaration de propriété valide.


Êtes-vous intentionnellement cartographier de votre modèle de vue à votre classe de domaine? Ce n'est pas recommandé par les mecs automatifers.


@Brian - ya. Pourquoi pas? Je veux dire que je pensais que c'est tout le point de la mappeuse automatique. Sinon, je dois faire de toutes les choses à la main, vaincre le but du mapper automatique. Ensuite, je pourrais aussi bien que la carte du domaine pour afficher le modèle à la main aussi.


Voir ce Alors question sur la mappage du modèle de vue retour au domaine. Je ne sais pas non plus pourquoi vous voudriez mapper un produitView dans un magasin. Pourquoi ne pas simplement la mapper sur un produit réel. C'est un bon exemple de la raison pour laquelle FOWNAPPER ne correspond pas au domaine bien. Tout le monde s'attend à ce qu'il fonctionne différemment. La cartographie du domaine à viewModel est beaucoup plus simple car ils ont tendance à ne pas avoir de nombreux niveaux d'objets imbriqués.


4 Réponses :


1
votes

L'erreur que vous obtenez est parce que vous ne pouvez pas déclarer que les déclarations de mappage de plus d'un niveau profond dans votre graphique de votre objet.

Parce que vous avez seulement posté une propriété, c'est difficile pour moi de vous donner les codes qui feront ce travail. Une option consiste à modifier votre propriété ViewModel sur MyTestStestid et les conventions vont automatiquement en prendre à ce sujet.


2 commentaires

J'ai ajouté d'autres propriétés.


Une dernière chose que j'ai changée mes affaires pour essayer de le récupérer par les conventions, mais cela ne fonctionne pas. J'ai changé SelectProductDID sur ProductID et ProductID (dans mon domaine) à ID. Toujours ne lie pas.



25
votes

Pour mapper des structures imbriquées, il vous suffit de créer un nouvel objet dans l'argument fort> MapFrom fort>

Exemple strong> P>

Mappage: P>

public class Source
{
    public int Id { get; set; }
}

public class Destination
{
    public NestedType MyNestedType { get; set; }
}

public class NestedType
{
    public int Id { get; set; }
}


0 commentaires

2
votes

Vous pouvez utiliser le résolveur.

Créer une classe de résolution comme celle-ci: p> xxx pré>

et utilisez-le comme ça: p>

Mapper.CreateMap<ProductViewModel, Store>()
        .ForMember(dest => dest.SelectedProductId, opt => opt.ResolveUsing<StoreResolver >());


0 commentaires

0
votes

La réponse correcte donnée par Allrameest sur cette question devrait aider: Mapping de niveau profond

C'est ce dont vous avez besoin: xxx

Remarque: vous devez essayer de vous éloigner de mapper.createmap à ce stade, il est obsolète et ne sera pas pris en charge bientôt.


0 commentaires