【发布时间】:2012-07-12 12:46:43
【问题描述】:
我有一个这样的模型
public class Exam
{
public int NewsId { get; set; }
public string Title { get; set; }
public string Description{ get; set; }
public string Program{ get; set; }
}
还有这样的视图模型
public class ExamViewModel
{
public int NewsId { get; set; }
public string Title { get; set; }
}
我确实像这样配置 Automapper
AutoMapper.Mapper.CreateMap<Exam, ExamViewModel>();
在 ActionResult 中,我使用了这样的 Automapper:
public ActionResult Exam()
{
var examsDb = db.Exams;
IEnumerable<ExamViewModel> examViewModel = AutoMapper.Mapper.Map<IEnumerable<Exam>, IEnumerable<ExamViewModel>>(examsDb);
return View(examViewModel);
}
在视图中我循环遍历它
@model IEnumerable<AraParsESOL.ViewModels.ExamViewModel>
<ul>
@foreach (var e in Model)
{
<li>
@Html.ActionLink(e.Title, "Type", "Exam")
</li>
}
</ul>
我的问题是: 正如您在 Model 中看到的那样,有 4 个属性,但在 viewModel 中只有 2 个属性。
如何在 viewModel 中只获取这 2 个属性而不是整个模型?
这里发生的情况是,在每个循环之后,它都会从数据库中获取所需的列,但我只想要这两个属性,而不是返回数据库。
我可以像这样获取数据库 db.Exam.ToList(); 但这会导致整个数据库恢复。 我想在这里使用最佳实践吗?
我知道我可以通过匿名类型和选择命令从数据库中获取数据,但是 automapper 有什么用呢? 这里最好的解决方案是什么?
【问题讨论】:
-
每个循环都会从数据库中获取所需的列,但我只想要这两个属性而不返回数据库,这是什么意思?您的模型中没有延迟加载 - 延迟加载仅影响相关实体,但您的模型没有任何实体。此外,您的代码应该执行与调用
db.Exam.ToList()相同的操作。 -
我的意思是在每次循环后的视图中,数据库都会被命中并且需要的数据会被取回。对于每一行,一个选择命令会进入数据库并选择那些拖曳属性,而不是只进入一次数据库并选择所有行并返回那些所需的数据。
标签: entity-framework automapper