AutoMapper IQueryable Erweiterung der Project().To<TViewModel>().SingleOrDefault()
diese Ausnahme auslöst:AutoMapper IQueryable Erweiterung wirft "Can not Elemente vom Typ vergleichen <Complex Type>" mit
nicht Elemente vom Typ ‚App.Domain.MyComplexType vergleichen. Nur primitive Typen, Aufzählungstypen und Entitätstypen werden unterstützt.
Ich habe dieses Modell:
public class MyEntityType // this is an entity type on the dbContext
{
public int Id {get;set;
public MyComplexType MyComplexType {get;set;}
}
public class MyComplexType // this is a complex type
{
public decimal Property1 { get; set;}
public string Property2 { get;set;}
}
public class ViewModel
{
public int Id { get;set;}
public decimal MyComplexTypeProperty1 { get;set;}
}
I AutoMapper Mapping konfigurieren verwenden IQueryable<MyEntityType>
-ViewModel
:
Mapper.CreateMap<MyEntityType, MyComplexType>(); // I rely on AutoMapper's
//convention for flattening `source.MyComplexType.Property1` to `dest.MyComplexTypeProperty1'
Dann versuche ich ein einzelnes Element wie folgt abzurufen:
var myItem = myContext.Where(x => x.Id == id).Project().To<ViewModel>().SingleOrDefault();
Ich erhalte die oben genannte Ausnahme, wenn SingleOrDefault()
genannt wird, so scheinbar
ich zur Zeit dieses Problem umgehen, indem man zuerst SingleOrDefault()
aufrufen und dann die Zuordnung zu tun, das funktioniert:
var myItem = Mapper.Map<ViewModel>(myContext.Find(id));
Weitere Beiträge im Grunde sagen, dass der Fehler, der oben entsteht wenn man versucht, einen EF Complex Type mit null zu vergleichen, wie zB in einer Where
Klausel, aber das ist hier offenbar nicht der Fall.
Haben Sie eine manuelle Projektion versucht? Verwenden einer SELECT LINQ-Anweisung? –
Nein, ich arbeite derzeit an meinem Problem, indem ich 'Project(). To()' verwerfen und ein fertiges In-Memory-Objekt zuordnen ('var myItem = Mapper.Map (myContext.Find (id));'). Das funktioniert. –
AunAun
Ja, aber haben Sie versucht, nur Select zu verwenden? –