Kann AutoMapper "überredet" werden, bestimmte Zuordnungen vorübergehend auszusetzen?
Um zu veranschaulichen, was ich erreichen möchte, werde ich eine Illustration verwenden. Angenommen, ich verfüge über ein Repository, StudentRepository , das LINQ verwendet, um mit Datenbankobjekten (Tabellen) wie Studenten, Kurse, Aktivitäten, Clubs usw. zu interagieren. Auf der Anwendungsseite gibt es passende Domänenobjekte Student, Course , Aktivität, Verein. Die Klasse Student enthält Array-Elemente vom Typ Kurs, Aktivität und Club wie:
%Vor%AutoMapper ist so konfiguriert, dass die Datenbankobjekte den Domänenobjekten zugeordnet werden, in denen die Zuordnungen in einem statischen Konstruktor des StudentRepository wie folgt definiert sind:
%Vor%Ist es möglich, AutoMapper zu überreden, die Mappings innerhalb eines Funktionsblocks zu unterbrechen? Zum Beispiel:
%Vor%HINWEIS " aus bestimmten Gründen ": Ein Grund, warum Sie die Kontrolle vom AutoMapper abwenden möchten, wäre dies Ссылка wo im Falle einer 1: n-Assoziationen, LINQ to SQL unterstützt nur das Verknüpfen einer 1: n-Verknüpfung pro Abfrage . AutoMapper wäre hier ineffizient - N Aufrufe zum Laden von Kursen für N Schüler, N weitere Aufrufe zum Laden von Aktivitäten für die gleichen N Schüler, die zurückkommen, und möglicherweise N weitere Aufrufe zum Laden von Clubs für dieselben N Schüler sind zurückgekommen.
Ist es möglich, AutoMapper zu überreden, die Mappings innerhalb eines Funktionsblocks zu unterbrechen?
Wie ich weiß, der beste Weg, es zu tun - verwenden Sie Ignore () wie folgt
%Vor%Wie bereits erwähnt, würde ich Ihnen empfehlen, für jedes Ziel, das Sie erreichen möchten, verschiedene Profile zu verwenden. Hier ist ein Beispiel.
%Vor%Eine Möglichkeit, dies zu erreichen, wäre, separate Mapping-Engine-Instanzen für jedes Szenario zu erstellen. Auf diese Weise könnten Sie verschiedene Maps konfigurieren, wie in diese Antwort von Jimmy Bogard, der einen einzelnen Typ auf verschiedene Arten abbilden möchte.
>Ist es möglich, AutoMapper zu überreden, die Mappings innerhalb eines Funktionsblocks zu unterbrechen?
Wie ich weiß, der beste Weg, es zu tun - verwenden Sie Ignore () wie folgt
%Vor%Wie bereits erwähnt, würde ich Ihnen empfehlen, für jedes Ziel, das Sie erreichen möchten, verschiedene Profile zu verwenden. Hier ist ein Beispiel.
%Vor%hmm ... Danke Jungs für das Feedback. Ich nahm mir Zeit, alle Antworten und Vorschläge zu berücksichtigen. Keiner macht besonders gut, obwohl sie viele Denkanstöße liefern. Ich dachte, ich sollte etwas spritzen, was ich versucht habe. ( Haftungsausschluss : Meine Meinung ist, dass es ein dreckiger Ansatz ist - viele Dinge könnten schief gehen - und Murphys Gesetze halten weiter an). Sie können die Ignore-Funktion in der bestimmten Instanz nutzen, um das Mapping "zu unterbrechen". In der Regel in einem Versuch und catch-Block wie folgt:
%Vor%Wie ich schon erwähnte, ist es vielleicht dreckig. Nicht die Art von Code, über den ich gerne schreiben würde - vor allem, weil ich nicht weiß, welche Ausnahmesituationen entstehen können, wenn CreateMap () im finally-Block fehlschlägt, aber in einer Legacy-Anwendung, in der man den Ansatz nicht überarbeiten kann Verwenden Sie möglicherweise andere Profile wie oben von @AndriyZakharko vorgeschlagen, Sie könnten es verwenden, um die Kontrolle vorübergehend zurück zu bekommen. Ich habe es selbst ausprobiert.
Kann AutoMapper "überredet" werden, bestimmte Zuordnungen vorübergehend auszusetzen?
Um zu veranschaulichen, was ich erreichen möchte, werde ich eine Illustration verwenden. Angenommen, ich verfüge über ein Repository, StudentRepository , das LINQ verwendet, um mit Datenbankobjekten (Tabellen) wie Studenten, Kurse, Aktivitäten, Clubs usw. zu interagieren. Auf der Anwendungsseite gibt es passende Domänenobjekte Student, Course , Aktivität, Verein. Die Klasse Student enthält Array-Elemente vom Typ Kurs, Aktivität und Club wie:
%Vor%AutoMapper ist so konfiguriert, dass die Datenbankobjekte den Domänenobjekten zugeordnet werden, in denen die Zuordnungen in einem statischen Konstruktor des StudentRepository wie folgt definiert sind:
%Vor%Ist es möglich, AutoMapper zu überreden, die Mappings innerhalb eines Funktionsblocks zu unterbrechen? Zum Beispiel:
%Vor%HINWEIS " aus bestimmten Gründen ": Ein Grund, warum Sie die Kontrolle vom AutoMapper abwenden möchten, wäre dies Ссылка wo im Falle einer 1: n-Assoziationen, LINQ to SQL unterstützt nur das Verknüpfen einer 1: n-Verknüpfung pro Abfrage . AutoMapper wäre hier ineffizient - N Aufrufe zum Laden von Kursen für N Schüler, N weitere Aufrufe zum Laden von Aktivitäten für die gleichen N Schüler, die zurückkommen, und möglicherweise N weitere Aufrufe zum Laden von Clubs für dieselben N Schüler sind zurückgekommen.
Eine Möglichkeit, dies zu erreichen, wäre, separate Mapping-Engine-Instanzen für jedes Szenario zu erstellen. Auf diese Weise könnten Sie verschiedene Maps konfigurieren, wie in diese Antwort von Jimmy Bogard, der einen einzelnen Typ auf verschiedene Arten abbilden möchte.
>Tags und Links c# linq linq-to-sql automapper