Ich versuche, Automapper-Projektionen auf Entity Framework IQueryables zu verwenden.
Beim Start der Anwendung erstelle ich alle meine Zuordnungsprofile, die Karten mit der nicht statischen CreateMap-Methode erstellen, und füge sie hinzu.
Alle diese Profile sind in meinem IoC-Container registriert.
Ich erhalte die fehlende Mapping-Ausnahme, obwohl ich das Mapping-Profil in der Instanz meiner mappingConfiguration sehe.
Was könnte das Problem sein? Fehle ich etwas? Ich benutze Automapper 4.2.1
Ich habe festgestellt, dass es beim Hinzufügen einer statischen Mapper.CreateMap funktioniert. Funktionieren Projektionen nur mit statischer API? Ich möchte die statische API vermeiden.
Vollständiger Code:
%Vor%Der Grund ist der folgende Block:
%Vor% source.ProjectTo
ist eine Erweiterungsmethode mit 5 Überladungen. In der Dokumentation übergeben sie die Instanz von MappingConfiguration
class und übergeben die Instanz von IMapperConfiguration
(interface). Sie denken, dass es den gleichen Effekt haben wird, aber es nicht tut. IMapperConfiguration
interface implementiert nicht IConfigurationProvider
interface, und das ( IConfigurationProvider
) ist die korrekte Überladung von ProjectTo
. Aber es gibt eine weitere Überladung von ProjectTo
, die " object parameters
" akzeptiert. Weil es ein Objekt akzeptiert - es passt alles an, was nicht zu anderen Überladungen passt. Was Sie wirklich aufrufen, ist ProjectTo(object)
overload, was nichts mit Konfiguration zu tun hat, und Ihr IMapperConfiguration
zusammen mit Profilen und Maps wird komplett ignoriert.
Quickfix wird
sein %Vor% Aber natürlich solltest du deine Konfiguration besser als IConfigurationProvider
in deinem Container registrieren, das ist nur eine schnelle Lösung, um sicherzustellen, dass das Problem wirklich hier ist.
Wie bei static Mapper.CreateMap
- nun, es ist statisch, funktioniert also unabhängig davon, was Sie an ProjectTo
übergeben.
Als eine Randnotiz zeigt Ihnen, wie Sie nicht api entwerfen. Immer wenn Sie viele Überladungen haben und eine von ihnen ein generisches Objekt annimmt und vollständig eine andere Sache als alle anderen Überladungen tut - das bedeutet Ärger.
Tags und Links c# entity-framework entity-framework-6 automapper automapper-4