我正在尝试使用 Automapper 将一些数据从 SQL 服务器自动投影到我的视图模型中。
我拥有的视图模型是:
public sealed class WorkstationViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public string OccupiedByName { get; set; }
}
我尝试使用的代码是:
Mapper.CreateMap<Workstation, WorkstationViewModel>()
.ForMember(T => T.OccupiedByName, T => T.MapFrom(W =>
W.Sessions.AsQueryable().Select(E => E.StaffMember.Name).SingleOrDefault()));
两个属性Id
,并且Name
是自动投影的,因为它们在Workstation
类中具有相同的名称。
我在这样的一些代码行上遇到的异常
var model = WorkstationsRepository.GetAll().Project()
.To<WorkstationViewModel>().SingleOrDefault();
是一些奇怪object reference is null
的异常,在堆栈跟踪的顶部有一些 automapper 的CreateExpression<>
方法,这给了我一个结论,即 automapper 无法生成一个好的表达式来将其转换为 SQL 代码。
当我使用简单的映射时,比如.Name
从.Category.Name
SQL 表中检索或其他单项检索,它可以完美运行。我只需要在通过 Automapper 投影序列时访问多个项目。