【发布时间】:2014-10-15 01:54:33
【问题描述】:
寻找最佳方法/模式的输入,以满足视图模型类的以下要求:
- 将 IQueryable 从存储库选择转换为 IQueryable 视图模型查询
- 将 db 实体的单个实例转换为视图模型实例
- 两者都使用单一方法将 db 实体映射到视图模型属性以避免映射复制
我正在尝试的示例,但它无法正常工作......而且似乎有点破解:
public class WorkOrderDependencyViewModel : IEntity, IViewModel<WorkOrderDependency, WorkOrderDependencyViewModel>
{
public int Id { get; set; } }
public int WorkOrderHeaderId { get; set; }
public int POHeaderId { get; set; }
public decimal RemainQty { get; set; }
//Re-use this mapping logic for both converting a query and converting a single db entity instance. Used by Kendo Grids
public IQueryable<WorkOrderDependencyViewModel> ConvertClassQueryToViewModelQuery(IQueryable<WorkOrderDependency> entityQuery)
{
var viewModelResultQuery = entityQuery
.Select(x => new WorkOrderDependencyViewModel()
{
Id = x.Id,
WorkOrderHeaderId = x.WorkOrderHeaderId,
POHeaderId = x.PODetail.POHeaderId,
RemainQty = x.PODetail.QtyOrdered - x.PODetail.QtyReceived
}
);
return viewModelResultQuery;
}
//convert single instance of db entity to view model, but use existing mapping logic from above method
public WorkOrderDependencyViewModel ConvertClassToViewModel(WorkOrderDependency entity)
{
var entityList = new List<WorkOrderDependency>();
entityList.Add(entity);
var viewModel = ConvertClassQueryToViewModelQuery(entityList.AsQueryable()).FirstOrDefault() as WorkOrderDependencyViewModel;
return viewModel; <------ viewModel is NULL
}
}
为什么 viewModel 返回 NULL?
【问题讨论】:
-
你的代码有错别字吗?您将实体投影到 WorkOrderDependencyListViewModel 而不是 WorkOrderDependencyViewModel
-
是的,谢谢,但这只是我在问题中粘贴信息时的拼写错误,而不是在真正的源代码中,所以这不是问题的根源。
-
我可能会放置一个断点并找出该行的哪一部分为空。例如实体为空,您的 ConvertClassQueryToViewModelQuery() 是否返回空?还要检查调用 FirstOrDefault() 是否为您提供了正确的类型。如果转换为 WorkOrderDependencyViewModel 失败,它将返回 null
-
@ChadRichardson - 你看过 AutoMapper 吗?我将它用于 Entity -> ViewModel 转换,反之亦然。 automapper.org
标签: c# asp.net-mvc entity-framework linq-to-entities