Vor einer Woche hatte ich eine ASP.NET MVC-Anwendung, die eine logische POCO-Service-Schicht aufgerufen hat, um Geschäftslogik gegen Entitäten auszuführen. Ein Ansatz, den ich häufig verwendete, war die Verwendung von AutoMapper zum Zuordnen eines besetzten Ansichtsmodells zu einer Entität und zum Aufrufen der Aktualisierung der Entität (Pseudocode unten). NHibernate Update-Methode auf der EntitätASP.NET MVC -> WCF -> NHibernate, wie Entität mit Daten aus Viewmodel effizient zu aktualisieren?
MyEntity myEntity = myService.GetEntity(param);
Mapper.CreateMap<MyEntityVM, MyEntity>();
Mapper.Map(myEntityVM, myEntity);
this.myService.UpdateEntity(myEntity);
Der Update Anruf würde eine Instanz des Unternehmens und über ein Endlager nehmen, rufen.
Nun, ich habe vor kurzem meine logische Service-Schicht in WCF Web Services geändert. Ich habe festgestellt, dass die Verbindung, die NHibernate mit einer Entität herstellt, jetzt verloren ist, wenn die Entität von der Serviceschicht an meine Anwendung gesendet wird. Wenn ich versuche, in der Update-Methode gegen die Entity zu arbeiten, sollten Dinge in der NHibernate-Sitzung nicht sein und umgekehrt - sie beschweren sich über Nullen auf Kind-IDs und dergleichen.
Also meine Frage ...
Was kann ich effizient von meinem besiedelten Ansichtsmodell Eingang nehmen und schließlich das Objekt durch NHibernate Modifikation am Ende?
- Gibt es eine schnelle Lösung, die ich mit NHibernate anwenden kann?
- Soll ich die Änderungen von der Anwendung auf die Serviceebene übertragen?
EDIT:
Der beste Ansatz, den ich von jetzt denken kann, ist eine neue Einheit zu schaffen und aus der Sicht Modell der neuen Einheit (einschließlich der Kennung) abzubilden. Ich würde dies an die Service-Schicht übergeben, wo es die Entität mithilfe des Repositorys abrufen würde, die Änderungen mithilfe von AutoMapper zuordnen und die Aktualisierungsmethode des Repositorys aufrufen. Ich werde zweimal mappen, aber es könnte funktionieren (obwohl ich eine Reihe von Eigenschaften/Kinder in der zweiten Zuordnung auszuschließen).