2016-07-08 11 views
0

Ich habe die folgenden zwei Klassen, die von Entity Framework Karte:AutoMapper Verwendung zu Entity Framework-Klassen Business-Klassen

public partial class Person 
{ 
    public int id { get; set; } 
    public string namen { get; set; } 
    public int house { get; set; } 
    [IgnoreMap] 
    public virtual House House1 { get; set; } 
} 

public partial class House 
{ 
    public House() 
    { 
     this.Persons = new HashSet<Person>(); 
    } 
    public int id { get; set; } 
    public string street { get; set; } 
    public string city { get; set; } 
    public ICollection<Person> Persons { get; set; } 
} 

Dann habe ich auch diese beiden ähnliche Klassen in meinem Business Layer:

public class House 
{   
    public House() 
    { 
     this.Persons = new HashSet<Person>(); 
    } 
    public int id { get; set; } 
    public string street { get; set; } 
    public string city { get; set; }   
    public virtual ICollection<Person> Persons { get; set; } 
} 

public class Person 
{ 
    public int id { get; set; } 
    public string namen { get; set; } 
    public int house { get; set; }   
} 

Ziemlich ähnlich, hugh? In meiner Business-Schicht lese ich eine Liste von Häusern aus der Datenbank. Dann Karte ich die ganze Liste in eine Liste meiner Business-Haus-Klasse AutoMapper:

public List<elci.BusinessEntities.House> getHouses() 
    { 
     YardEntities cx = new YardEntities(); 
     Mapper.Initialize(cfg => cfg.CreateMap<DataAccessLayer.House, BusinessEntities.House>()); 

     List<DataAccessLayer.House> dhl = cx.Houses.ToList(); 
     List<BusinessEntities.House> bhl = Mapper.Map<List<DataAccessLayer.House>, List<BusinessEntities.House>>(dhl); 
     return bhl; 
    } 

jedoch in der folgenden Zeile ich eine Laufzeitausnahme erhalten:

Mapper.Map<List<DataAccessLayer.House>, List<BusinessEntities.House>>(dhl); 

„Error Mapping-Typen“.

Ich vermute, dass dies sein könnte, weil jede Person auf ein Haus zeigt und jedes Haus auf Personen zeigt. Da ich diesen "Kreis" in meinem BusinessLayer nicht brauche, habe ich dieses Attribut mit [IgnoreMap] versehen, aber ohne Erfolg. Der Fehler bleibt bestehen.

Irgendwelche vorschlagen, was ich falsch mache?

+0

Wenn Sie entfernen 'IgnoreMap' Attribut Ist es funktioniert – Venky

+1

' Fehler Mapping Types' Fehler gibt auch welche Arten nicht abgebildet sind, können Sie zu bekommen.?. in die inneren Ausnahmedetails und fügen Sie sie hier ein – Venky

+1

Außerdem müssen Sie einen 'Mapper' für' Person' Entitäten explizit erstellen, da sie in 'House' Entität referenziert sind. – Venky

Antwort

0

Also das schließlich fixiert meine Frage:

 Mapper.Initialize(cfg => { 
      cfg.CreateMap<List<House>, List<HouseViewModel>>(); 
      cfg.CreateMap<List<Person>, List<PersonViewModel>>(); 
     }); 
0

Ja, der Fehler bleibt ohne ignormap. Die innere Ausnahme sagt mir folgende:

{"Error mapping types.\r\n\r\nMapping types:\r\nList`1 -> List`1\r\nSystem.Collections.Generic.List`1[[elci.DataAccessLayer.House, DataAccessLayer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> System.Collections.Generic.List`1[[elci.BusinessEntities.House, BusinessEntities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"} 

so dass der Haus-Typ das Problem ist. Ich habe auch versucht, eine andere Karte hinzuzufügen:

 Mapper.Initialize(cfg => cfg.CreateMap<DataAccessLayer.House, BusinessEntities.House>()); 
     Mapper.Initialize(cfg => cfg.CreateMap<DataAccessLayer.Person, BusinessEntities.Person>()); 

ohne Erfolg und die gleichen Fehler. :-(

Verwandte Themen