2012-03-28 5 views
-1
Mapper.CreateMap<Foo,Bar>(); 
var test1 = Mapper.FindTypeMapFor<Foo,Bar>(); //this succeeds 
var foos = db.Foos.ToList(); 
var test2 = Mapper.FindTypeMapFor<Foo,Bar>(); //this returns null 

Warum würde der Aufruf von ToList (wenn ich ToList lösche, funktioniert es gut) die Zuordnung nicht mehr existieren?Mapping wird durch scheinbar nicht verwandten Code gelöscht?

+1

Verwenden Sie L2S, EF oder etwas anderes dort? Framework-Version, Autoadapter-Version usw. kann nützlich sein. –

+0

db.Foos ist zuerst der Entity Framework-Code. Automapper v2.0.0.232 installiert über NuGet. – AaronLS

+0

Ihr einfaches Beispiel funktioniert auf meinem Rechner, deshalb verzichten Sie auf relevante Details. Versuchen Sie, ein eigenständiges reproduzierbares Beispiel zu erstellen und erneut zu veröffentlichen. –

Antwort

0

Hier ist nicht viel los; Ich habe eine einfache Implementierung auf meiner Maschine eingerichtet und es funktionierte gut. Meine Vermutung ist, dass Ihr Modell ein wenig komplexer ist und die EF-Abfrage einen Nebeneffekt hat, dynamisch einen oder mehrere von Foo abgeleitete Typen zu erzeugen, die AutoMapper nicht in der Lage ist, Bar zuzuordnen. Die ToList() Signifikanz ist nur, dass dies die Abfrage ausführt, die bis zu diesem Zeitpunkt zurückgestellt wurde. Versuchen Sie die Einstellung

db.Configuration.ProxyCreationEnabled = false; 

vor dem Ausführen der Abfrage und sehen, ob es noch passiert.

+0

Auch wenn ToList abgeleitete Typen erzeugt hat, versuche ich in diesem Code nicht einmal die Foos zu konvertieren. Ich übergebe "Foos" überhaupt nicht an AutoMapper, also sollte es wirklich nicht mit einbezogen werden. Ich rufe FindTypeMapFor auf, um zu demonstrieren, dass das Mapping irgendwie entfernt wird. Ich musste die Zuordnung von CreateMap zu einer Instanzeigenschaft meiner Klasse speichern, um sicherzustellen, dass sie nicht verschwindet. Ich weiß nicht, ob es irgendwie Müll sammelt, wenn ich keinen Bezug darauf habe. Ich nehme an, ich könnte den Quellcode für FindTypeMapFor nachschlagen und sehen, auf welche Sammlung verwiesen wird. – AaronLS

+0

Ich werde deinen Vorschlag versuchen und sehen, wie das ausgeht. – AaronLS

Verwandte Themen