Ich habe folgende Entity Framework Entitäten:Saving AutoMapper kartiert Sammlungen von Entities Entity Framework mit
public class Region
{
public int RegionId { get; set; } // Primary Key
public string Name { get; set; }
public virtual ICollection<Country> Countries { get; set; } // Link Table
}
public class Country
{
public int CountryId { get; set; } // Primary Key
public string Name { get; set; }
public int RegionId { get; set; } // Foreign Key
}
I Karte diese mit AutoMapper den folgenden Viewmodels:
public class RegionViewModel
{
public int RegionId { get; set; }
public string Name { get; set; }
public virtual ICollection<int> Countries { get; set; }
}
public class CountryViewModel
{
public int CountryId { get; set; }
public string Name { get; set; }
}
ich meine Viewmodels übersetzen an Entitäten, die AutoMapper verwenden, damit ich eine neue Region speichern kann. Das ist mein Mapping-Code:
Mapper.CreateMap<RegionViewModel, Region>()
.ForMember(x => x.Countries, x => x.MapFrom(y => y.Countries.Select(z => new Country() { CountryId = z }).ToArray()));
Diese eine Ausnahme verursacht, wenn die Region im Repository hinzugefügt, da es auch eine neue Instanz von Land mit einem Null-Namen zu erstellen versucht. Eine Lösung besteht darin, die Methode Add
in meinem Repository zu ändern, um den Zustand der Länderobjekte auf Unverändert zu setzen. Die andere alternative Lösung besteht darin, eine kompliziertere Übersetzungslogik zu verwenden, die ein anderes Repository verwendet, um die echten Länderobjekte zu erhalten. Dieser Ansatz weist eine langsamere Leistung auf, da er einen zusätzlichen Aufruf an die Datenbank vornehmen muss, Sie aber auch ein vollständigeres Region-Objekt erhalten.
Mapper.CreateMap<RegionViewModel, Region>();
Mapper.CreateMap<int[], Country[]>().ConvertUsing(x => countryRepository.GetAll().Result.Where(y => x.Contains(y.CountryId)).ToArray());
Ich lehne mich an den ersten, aber was ist der richtige Ansatz?
Warum benötigen Sie Auto-Mapper? Könnten Sie die Entität als Ihr Ansichtsmodell verwenden? – stepandohnal
Ich benutze AutoMapper, um Zeit zu sparen beim Schreiben von Code für die Übersetzung von Textbausteinen. Alle, wenn Sie AutoMapper aus der Frage entfernen. Ich denke, die Frage steht immer noch. Was ist der richtige Ansatz? –