2017-03-16 1 views
0

Ich habe eine Situation, die CreateMissingTypeMaps und manuelle Zuordnungen zur "gleichen Zeit" (oder zumindest in der gleichen Konfiguration) erfordert.Wie werden die CreateMissingTypeMaps-Option und manuelle Zuordnungen mit EF-Proxy-Klassen verwendet?

Szenario: Die Klassen "Domain" und "View Model" werden mithilfe von Profilen manuell zugeordnet. Die CreateMissingTypeMaps-Eigenschaft ist erforderlich, da ich über eine Antikorruptionsebene für den Zugriff auf ein Legacy-System verfügt, das anonyme Objekte zurückgibt.

Das Problem ist, dass die Mapping-Mapping ihre Zuordnung von CreateMissingTypeMaps Option überdeckt, wenn es auf True festgelegt ist, und ich kann keine anonyme Objekte zuordnen, wenn es falsch ist.

Ich habe versucht CreateMissingTypeMaps innerhalb der MapperConfiguration innerhalb eines Profils und auch innerhalb eines Profils mit einer Mapping-Bedingung, aber alle von ihnen gescheitert.

Der folgende Code ist mein Versuch, ein bedingtes Profil zu erstellen, das nur für anonyme Objekte angewendet werden soll.

public class AnonymousProfile : Profile 
    { 
     public AnonymousProfile() 
     { 
      AddConditionalObjectMapper().Where((s, d) => s.GetType().IsAnonymousType()); 
      CreateMissingTypeMaps = true; 
     } 
    } 

    // inside my MapperConfiguration 
    cfg.AddProfile(new AnonymousProfile()); // also tried cfg.CreateMissingTypeMaps = true; 

[EDIT:] Die ursprüngliche Frage EF nicht erwähnt, aber ich entdeckte, dass seine Proxy-Klassen ein Teil des Problems sind.

+0

Können Sie einen Beispielcode angeben, der das Problem reproduziert? –

+0

@IvanStoev Ich schrieb einen kurzen Demo-Code, als ich entdeckte, dass das Problem nur auftritt, wenn EF-Proxy-Klassen verwendet werden. Inzwischen wurde meine Frage auf Github beantwortet und jetzt schreibe ich eine Antwort auf meine eigene Frage. Vielen Dank für Ihr Interesse an meiner Frage. –

Antwort

0

Ich refaktorierte meinen Code nach these Richtungen wies von Tyler auf Github.

  1. Mein anonymous type check hatte einen Fehler (ich sollte nicht GetType verwenden)
  2. Objekte aus System.Data.Entity.DynamicProxies ignoriert werden müssen

Meine neu geschrieben AnonymousProfile Klasse:

public class AnonymousProfile : Profile 
{ 
    public AnonymousProfile() 
    { 
     AddConditionalObjectMapper().Where((s, d) => 
      s.IsAnonymousType() && s.Namespace != "System.Data.Entity.DynamicProxies"); 
    } 
} 
Verwandte Themen