12
votes

Utilisation de MOWORAPPER, mappage de DTOS Retour à l'ensemble de l'entité, y compris des entités référencées

J'ai des entités de domaine POCO qui sont persistées à l'aide de la structure d'entité 5. Ils sont obtenus à partir du DBContext à l'aide d'un motif de référentiel et sont exposés à une application webap de MVC reposante via un motif UOW. Les entités de POCO sont des procurations et sont chargées de paresseuses.

Je convertissez mes entités en DTO avant de les envoyer au client. J'utilise automapper pour le faire et cela semble fonctionner correctement avec la cartographie de la cartographie des Pocos proxy à DTO, en gardant les propriétés de navigation intactes. J'utilise le mappage suivant pour cela: p> xxx pré>

exemple d'objets de domaine / DTO: p> xxx pré>

maintenant j'essaie Pour mettre à jour mon contexte à l'aide de DTOS envoyé sur le fil. J'ai des problèmes spécifiques avec l'obtention des propriétés de navigation / des entités associées qui fonctionnent correctement. La cartographie de ceci que j'utilise est la suivante: p> xxx pré>

ci-dessus, la clienteuw.get () fait référence à dbcontext.set.find () pour que je reçois le proxy de suivi POCO objet de EF (qui contient toutes les entités associées aussi comme proxies). p>

dans ma méthode de contrôleur, je pratique les éléments suivants: P>

    var originalEntity = _entities.Find(entity.Id);
    _context.Entry<T>(originalEntity).State = System.Data.EntityState.Detached;
    _context.Entry<T>(entity).State = System.Data.EntityState.Modified;


4 commentaires

Devrait-il être icollection et icollection dans votre ClientDo classe? (Comme vous avez également CompliancerequirementDo ). Avez-vous cartographié ces DTO de la même manière que ClientDo?


@Gernold Oui Merci, vous êtes correct, mais ce n'est pas pertinent pour le problème. Je travaille sur une manière standardisée de répondre aux questions originales que je peux poster comme une réponse quand elle est prête.


@Ibraheem Toute progression de votre manière normalisée? On a l'impression que d'autres cartes automapper sont nécessaires et une sorte de déplacement récursif dans les propriétés de navigation dans la mise à jour à l'aide de la réflexion.


Hey! Vous vous demandez simplement si vous avez une chance d'essayer ma réponse ci-dessous? Si oui, pourriez-vous marquer est la bonne réponse? Merci beaucoup!!


3 Réponses :


0
votes

Vous avez déjà identifié le problème:

La logique de persistance ci-dessus met à jour l'objet proxy 'racine' EF dans la Contexte, toutefois toute entité liée n'est pas mise à jour

Vous définissez l'état modifié uniquement sur le nœud racine uniquement. Vous devez écrire du code pour itérer tous les objets et définir l'état à modifier.


1 commentaires

Comme je l'ai dit, "retourner pour le faire manuellement". "Ceci est une limitation de base de l'EF". SURACHAPPER ne sera pas capable d'aider.



0
votes

J'ai mis en place un motif pour gérer cet état de modèle de hiérarchie avec EF.

Chaque classe de modèle d'entité implémente une interface comme ci-dessous, de même que les classes de modèle d'affichage: p>

dbContext.SaveChanges();


0 commentaires

0
votes

Ce que vous voulez faire est d'obtenir l'entité de la base de données d'abord:

Mapper.Map<UpdateClientInput,  Client>(inputDto, centity);
_context.update();


0 commentaires