Wir verwenden Automapper für einige Zeit und wir denken, es ist ein großer Nutzen, danke für die Erstellung!Wie wird mit Automapper auf interne Eigenschaften abgebildet?
Wir haben jedoch eine Frage:
Frage
„Wie wird AutoMapper eine Quelleigenschaft an einen internen Ziel Eigenschaft zur Karte?“
Hintergrund
In unserer geschichteten Architektur, Objekte Dto nie verlassen werden, um die Datenzugriffsschicht, nur Domain-Objekte erlaubt in die und aus der Datenzugriffsschicht zu übergeben. Daher sollten Domänenobjekte von einer Domänen-POV kein Datenbankwissen enthalten. In der Praxis sind Datenbank-IDs jedoch sehr nützlich, um sie herumzutragen - erwarten Sie, dass der Business-Layer-Entwickler nichts über sie wissen sollte.
Lösung: Fügen Sie die Datenbank-IDs zum Domänenobjekt hinzu, aber vermarkten Sie sie als intern, sodass sie nicht der 'Business-Schicht' ausgesetzt sind. Setzen Sie anschließend die Interna der Common-Ebene (die die Domänenobjekte besitzt) für die Datenzugriffsebene frei. Problem gelöst. Erwarten Sie, dass wir nicht herausfinden können, wie man Automapper (> v3.3.0) mit unseren internen Eigenschaften arbeiten kann.
In, Version 3.3.0 BindingFlags
wurden ausgesetzt, die das Problem zu lösen.
Beispiel
Common.Dll
public class Person
{
public Parent Father { get; set; }
internal int FatherId {get; private set; }
}
DataAccess.dll
internal class PersonDto
{
public ParentDto Father { get; set; }
public int FatherId {get; private set; }
}
In unserem Profil Klasse haben wir CreateMap<PersonDto, Person>();
Edit 1 - Ein Tippfehler im Rückgabetyp von Vater wurde korrigiert.
Edit 2 - Added mehr Informationen ..
Im Common.Dll haben wir Dienstleistungen etwas wie folgt aus:
public class ParentService
{
public Parent GetFather(Person person)
{
return repo.Parents.FirstOrDefault(parent => parent.Id = person.Father.Id);
}
}
Und im Business.Dll haben wir Entwickler der Nutzung der Dienste so etwas wie diese:
var father = parentService.GetFather(son);
// use father separately or assign it to the son. Like so:
// son.Father = father;
der springende Punkt ist, dass wir nicht wollen, dass das Geschäft Entwickler Zugang zuhabenvon der Businsess.Dll noch haben sie Zugriff auf das Dto-Objekt, das das Domänenobjekt erstellt.
So wird das gesamte 'Datenbank' Wissen in den verschiedenen Common.dll Services oder in der DataAccess.dll gekapselt.
Danke.