0

Aktuelles Projekt starten:ExpressMapper Tutorial Annahmen - ich weiß nicht, wo

  • ASP.NET 4.5.2
  • MVC 5
  • EF 6

In aller Ehrlichkeit Ich habe noch nie zuvor einen Mapper benutzt, und während der ExpressMapper tutorial über die Höhenhöhen springt, macht er mehrere Annahmen über Wissen, das ich nicht habe.

So in keiner allgemeinen Ordnung:

Das Produkt soll all seinen Code an einem Ort zentralisiert haben. Wo ist dieser Ort? Wo soll ich es hinstellen? Die Beispiele beginnen mit,

public void MappingRegistration() { 
    Mapper.Register<Product,ProductViewModel>(); 
} 

Aber ich weiß nicht, wo ich das hinstellen soll. Geht es in eine eigene Datei oder befindet es sich in einer anderen Datei, beispielsweise in App_Start?

Wenn es woanders im Projekt ist, erstelle ich es unter seinem eigenen Namensraum?

Wenn ich ein ViewModel habe, das anders gefüllt ist als sein dataModel, wie handhabe ich jeden Typ separat? Wie in, werden die Daten aus der DB herausgezogen und füllen das viewModel mit völlig anderen Bedingungsregeln, als dass die Daten aus dem viewModel abgerufen und in die Datenbank eingefügt oder in die Datenbank zurück aktualisiert werden.

Wie bringe ich externe Bedingungen ein, die sich darauf auswirken, wie die Daten und welche Daten in die Datenbank eingefügt werden, z. B. die Rolle des Benutzers, ihre Benutzer-ID und ihren Benutzernamen und verschiedene Projekteinstellungen? Abhängig von den Bedingungen können einige Einträge mit einem Nullwert anstelle eines tatsächlichen Werts enden. Wie kann ich eine Geschäftslogik-Validierung unter Verwendung dieser Bedingungen durchführen (der Benutzer aktualisiert tatsächlich seinen eigenen Datensatz, indem er seine Sitzungs-Benutzer-ID mit der in der Datenbank gespeicherten Benutzer-ID vergleicht)?

Momentan mache ich eine Menge manuelles Mapping in den Modellen, aber das ist problematisch, vor allem da die Methode, die ich benutze (um Code im Controller zu reduzieren) bedeutet, dass ich während eines Updates keinen Eintrag in der DB vor dem Aktualisieren in der DB.

Antwort

2

Sie können es überall wo Sie wollen - das einzige, was notwendig ist, dass es in Code aufgerufen wird, bevor Sie Mapper.Map<Product,ProductViewModel> anrufen.

z.

public static void main() 
{ 
    Mapper.Register<Product,ProductViewModel>(); 
} 

ist funktionell die gleiche wie

public static void main() 
{ 
    RegisterMapping(); 
} 

public static void RegisterMapping() 
{ 
    Mapper.Register<Product,ProductViewModel>(); 
} 

Wenn Sie eine Klasse Mitglied einer anderen Klasse Mitglied mit einem anderen Namen zuordnen möchten, können Sie es mit Member Mapping angeben.

Mapper.Register<Product, ProductViewModel>() 
    .Member(dest => dest.efgh, src => src.abcd); 

Wenn Sie spezielle Konvertierungsregeln anwenden möchten, können Sie das mit einem Function Mapping angeben - zum BeispielSie wollen, dass der Preis in der ProductViewModel 2x den Preis des Produkts zu sein:

Mapper.Register<Product, ProductViewModel>() 
    .Function(dest => dest.Price, src => src.Price*2); 

Jede Anpassung, die Sie zum Mapping machen sollten Sie die Zuordnung registrieren, zu der Zeit durchgeführt werden und hat auf einem Mitglied getan werden -von-Mitglied-Basis AFAIK.

Wenn es noch etwas anderes gibt, mit dem Sie Hilfe benötigen, hinterlassen Sie einen Kommentar.

Verwandte Themen