У меня есть набор классов.
public class Student
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<ScoreRecord> ScoreRecords { get; set; }
}
public class ScoreRecord
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int StudentId { get; set; }
public virtual Student Student { get; set; }
public string Subject { get; set; }
public int Score { get; set; }
}
public class ScoreModel
{
public int MinScore { get; set; }
public int MaxScore { get; set; }
}
public class StudentViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public ScoreModel Score { get; set; }
}
Мне нужно выполнить это отображение:
Mapper.CreateMap<Student, StudentViewModel>()
.ForMember(d => d.Score, opts => opts.MapFrom(m => m.ScoreRecords));
Mapper.CreateMap<ICollection<ScoreRecord>, ScoreModel>()
.ForMember(d => d.MinScore, opts => opts.MapFrom(m => m.Min(s => s.Score)))
.ForMember(d => d.MaxScore, opts => opts.MapFrom(m => m.Max(s => s.Score)));
Следующий код вызывает исключение:
var student = context.Students.ProjectTo<StudentViewModel>().FirstOrDefault(e => e.Id == 1);
Информация об исключении:
Произошло необработанное исключение типа 'System.NotSupportedException'
в EntityFramework.SqlServer.dll
Дополнительная информация: Невозможно сравнить элементы типа 'System.Collections.Generic.ICollection`1 [[EFTest.Entities.ScoreRecord,
EFTest, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = ноль]] '. Только
поддерживаются примитивные типы, типы перечисления и типы объектов.
Если я не использую проекцию, то отображение работает правильно. Следующий код выполняется без ошибок.
var student = ctx.Students.FirstOrDefault(e => e.Id == 1);
var studentViewModel = Mapper.Map<StudentViewModel>(student);
Почему не удается сопоставить с проекцией и как это исправить?
Automapper version: 4.0.4
, версия EntityFramework: 6.1