Ich verwende Entity-Framework für meine DAL und möchte Entitätsobjekte in Business-Objekte und umgekehrt konvertieren. Dies geschieht in meinem BLL-Projekt. Ich hoffe, Autoadapter in meinem BLL-Projekt zu installieren ... sagen wir Customer.cs automatisch von EF generiert und konvertiert es zu CustomerWithDifferentDetail.cs (mein Geschäft Obj)Automapper Konfiguration Setup
Ich habe versucht, eine AutoMapperBLLConfig.cs unter BLL zu erstellen Projekt mit dem folgenden Code:
public static void Configure()
{
Mapper.Initialize(cfg =>
{
cfg.AddProfile(new CustomerProfile());
});
}
public class CustomerProfile : Profile
{
protected override void Configure()
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Customer, CustomerWithDifferentDetail>();
cfg.CreateMap<CustomerWithDifferentDetail, Customer>();
});
}
}
Dann habe ich CustermerService.cs unter BLL Projekt mit dem folgenden Code zu testen, ob es funktioniert:
public void CustomerToCustomerWithDifferentDetail()
{
AutoMapperBLLConfiguration.Configure();
Customer source = new Customer
{
Account = 1234,
Purchase_Quantity = 100,
Date = "05/05/2016",
Total = 500
};
Models.CustomerWithDifferentDetail testCustomerDTO = Mapper.Map<Customer, Models.CustomerWithDifferentDetail>(source)
}
ich diesen Fehler erhalten: Fehlende Kartentyp Konfiguration oder nicht unterstützte Zuordnung
Ich bin mir nicht sicher, was ich falsch gemacht habe. Ich habe kein start_up oder global.aspx. Dies ist eine Klassenbibliothek. Ich bin mir nicht sicher, was ich vermisse oder falsch gemacht habe.
Ich habe ein separates Projekt ruft Modelle, die alle Geschäftsobjekte einschließlich CustomerWithDifferentDetail.cs enthalten. In diesem Fall hat CustomerWithDifferentDetail nur zwei Eigenschaften: Konto und Gesamt. Wenn es zugeordnet wird, sollte es Account = 1234 und Total = 500 geben - im Grunde die gleichen Daten wie Entitätsobjekt nur in anderer Form.
======================= UPDATE ====================== =========== AutoMapperBLLConfig.cs - gleich bleiben wie oben
CustomerProfile.cs bemerkt
public class CustomerProfile : Profile
{
protected override void Configure()
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Customer, CustomerWithDifferentDetail>().ReverseMap(); //cut it down to one line with ReverseMap
});
}
CreateMap<Customer, CustomerWithDifferentDetail>().ReverseMap(); //missed this one line before; hence, the error
}
CustomerService.cs
static CustomerService()
{
AutoMapperBLLConfiguration.Configure(); //per @Erik Philips suggestion, move this call to a static constructor
}
public void CustomerToCustomerWithDifferentDetail()
{
Customer source = new Customer
{
Account = 1234,
Purchase_Quantity = 100,
Date = "05/05/2016",
Total = 500
};
Models.CustomerWithDifferentDetail testCustomerDTO = Mapper.Map<Customer, Models.CustomerWithDifferentDetail>(source);
}
Ergebnis: mein testCustomerDTO gibt genau das zurück, was ich erwartet habe.
können Sie setzen .Reverse() nach dem Erstellen die Karte. Keine Notwendigkeit, die zweite "umgekehrte" Linie zu machen. –
Danke. Ich bin mir dessen bewusst. Ich frage mich, ob @James und Erik sich darauf beziehen, mehr als einmal zu kartieren ... – NKD
Seien Sie vorsichtig, wenn Sie .ForMember und .Reverse mit spezifischen Membern verknüpfen. –