Kann AutoMapper "überredet" werden, bestimmte Zuordnungen vorübergehend auszusetzen?

8

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.

    
John Gathogo 22.05.2012, 14:37
quelle

3 Antworten

4
  

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%     
Andriy Zak 28.05.2012, 09:37
quelle
2

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.

>     
Rob West 28.05.2012 08:58
quelle
0
___ qstnhdr ___ Kann AutoMapper "überredet" werden, bestimmte Zuordnungen vorübergehend auszusetzen? ___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entworfen wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ answer10782411 ___
  

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%     
___ tag123linq ___ Die Language Integrated Query (LINQ) ist eine Microsoft .NET Framework-Komponente, die native Datenabfragefunktionen zu .NET-Sprachen hinzufügt. Bitte denken Sie bei Bedarf daran, ausführlichere Tags zu verwenden, zum Beispiel [linq-to-sql], [linq-to-entities] / [entity-framework] oder [plinq] ___ tag123Automapper ___ Ein konventionsbasierter Objekt-zu-Objekt-Mapper und -Tranformer für .NET ___ answer 10878587 ___

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.

    
___ tag123linqtosql ___ LINQ to SQL ist eine Komponente von .NET Framework Version 3.5, die eine Laufzeitinfrastruktur für die Verwaltung relationaler Daten als Objekte in Microsoft SQL Server bereitstellt. ___ qstntxt ___

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.

    
___ answer10781918 ___

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.

>     
___
John Gathogo 04.06.2012 08:46
quelle

Tags und Links