AutoMapper IQueryable внутренней линии Project().To<TViewModel>().SingleOrDefault()
бросает это исключение:AutoMapper IQueryable Extension кидает "Невозможно сравнить элементы типа <Complex Type>" с
Не можете сравнить элементы типа «App.Domain.MyComplexType. Поддерживаются только примитивные типы, типы перечислений и типы сущностей.
У меня есть эта модель:
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;}
}
я использую AutoMapper настроить отображение из IQueryable<MyEntityType>
в ViewModel
:
Mapper.CreateMap<MyEntityType, MyComplexType>(); // I rely on AutoMapper's
//convention for flattening `source.MyComplexType.Property1` to `dest.MyComplexTypeProperty1'
Тогда я стараюсь, чтобы получить один элемент, как это:
var myItem = myContext.Where(x => x.Id == id).Project().To<ViewModel>().SingleOrDefault();
Я получаю вышеуказанное исключение, когда SingleOrDefault()
называется, так что, по-видимому
Сейчас я работаю вокруг этого первого вызова SingleOrDefault()
, а затем делает отображение, это работает:
var myItem = Mapper.Map<ViewModel>(myContext.Find(id));
Другие сообщения в основном говорят, что ошибка возникает внезапно при попытке сравнить сложный тип EF с нулевым, как, например, в предложении Where
, но это, по-видимому, здесь не так.
Вы пробовали ручную проекцию? Использование оператора Select LINQ? –
Нет, я в настоящее время работаю над своей проблемой, отбрасывая 'Project(). To()' и отображение готового объекта в памяти ('var myItem = Mapper.Map (myContext.Find (id));'). Это работает. –
AunAun
Да, но вы пробовали использовать только Select? –