我想知道在将实体框架实体映射到ViewModels时是否真的需要使用一些对象到对象的映射器。周围的样本通常显示1实体映射到1视图模型。但现实生活通常是不同的;因为我们通常需要连接多个表并从每个表中选择一些列。 (我使用POCO实体和ASPNET MVC)以下是我总是用来将我的linq查询结果映射到ViewModels的内容。
public List<MyViewModel> GetSomeDataForView(string filter1)
{
using (MyEntities context = GetMyEntites())
{
var query = (from t1 in context.Table1
join t2 in context.Table2 on t2.Table1Id equals t1.Id
join t3 in context.Table3 on t3.Table2Id equals t2.Id
where t1.FilterColumn=filter1
select new MyViewModel
{
Property1 = t1.Column1,
Property2 = t1.Column2,
Property3 = t2.Column1,
Property4 = t3.Column1
});
return query.ToList();
}
}
答案 0 :(得分:3)
不,这不是真的需要。无论什么对你有用并满足你的要求就足够了。
Automapper和类似的解决方案允许您将映射逻辑拉出到单独的层并自动化它。有时这是一种好处,有时不是。一切都取决于具体情况。
答案 1 :(得分:1)
不在您展示的示例中,该示例执行自定义投影和加入。通常它在我的项目中看起来像这样:
using (MyEntities context = GetMyEntites())
{
var query = context.Table1
.Where(t1 => t1.FilterColumn == filter1)
Project().To<MyViewModel>();
return query.ToList();
}
在此处查看更多信息:https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions