2014-11-04 11 views
5

Używam AutoMapper do projektu następującą strukturęprojekt zagnieżdżone obiekty AutoMapper gdzie wewnętrzna obiekt jest pustych braku

public class OuterSource 
{ 
    .... 
    public Guid? InnerId { get; set } 
    public InnerSource Inner { get; set; } 
} 

public class InnerSource 
{ 
    public Guid Id { get; set; } 
    public DateTime Date { get; set; } 
} 

public class OuterDest 
{ 
    .... 
    public InnerDest Inner { get; set; } 
} 

public class InnerDest 
{ 
    public Guid Id { get; set; } 
    public DateTime Date { get; set; } 
} 


var result = AutoMapper.Project<OuterSource, OuterDest>(query); 

Jak widać, obiekt wewnętrzny jest pustych.

Projekcja działa dobrze, jeśli obiekt Wewnętrzny ma wartość, ale jeśli obiekt Wewnętrzny ma wartość NULL, EF wyrzuci wyjątek, tak jakby nie rozumiał, że InnerDest powinien w rzeczywistości mieć wartość NULL.

"The cast to value type 'Guid' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type." 

Korzystanie

var result = AutoMapper.Map<IEnumerable<OuterSource>, IEnumerable<OuterDest>>(query); 

nie rozwiązuje mojego problemu, ale oczywiście wolałbym użyć projektu.

Czy jest jakiś dobry sposób obejścia tego, czy może po prostu nie używać.

Odpowiedz

0

Problem polega na tym, że obiekt źródłowy zawiera pola zerowe, a obiekt docelowy nie. Jeśli właściwość nie jest pusta i spróbujesz ustawić ją na wartość null, otrzymasz wyjątek. Aby to naprawić, masz 2 opcje. Albo zrobić pól w okolicy wartości pustych

public class OuterDest 
{ 
    public Guid? Id { get; set; } 
    public DateTime Date { get; set; } 
} 

Albo utworzyć niestandardowy obsługi w ty mapowanie obsłużyć wartości null i ustawić wartości domyślne dla pól w pytaniu.

0

Co to jest konfiguracja mapowania? Aby mapowanie było zrozumiałe, musisz indywidualnie odwzorować zarówno outsource => outerdest i innersource => innerdest.

Powiązane problemy