ViewModel对象到EF模型实体转换在哪里?

时间:2011-01-18 17:15:03

标签: asp.net-mvc entity-framework mapping automapper valueinjecter

我目前有一个基于Entity Framework v4实体的存储库(已实现CRUD和GET操作)。我正在为这些实体创建相应的视图模型。我应该在哪里放置转换/映射?在控制器中或修改存储库以在其方法中执行映射并返回(或接受)View Model类型的对象?

我应该这样做吗

    public ActionResult Index()
    {
        var person = new PersonRepository().Get();

        var personViewModel = new PersonViewModel();
        personViewModel.InjectFrom(person)
            .InjectFrom<CountryToLookup>(person);

        return View(personViewModel);
    }

或者

     public ActionResult Index()
        {
            var personViewModel = new PersonRepository().Get(); // returns object of type PersonViewModel

// and move this to repository
//            var personViewModel = new PersonViewModel();
//            personViewModel.InjectFrom(person)
//               .InjectFrom<CountryToLookup>(person);

            return View(personViewModel);
        }

2 个答案:

答案 0 :(得分:3)

我会将它解压缩到控制器上的私有方法中,或者将其放入服务类中,如果它将在其他地方重用。

我不认为把它放在存储库上是个好主意,除非它不是通用的。应该是什么,因为在我看来,通用存储库摇滚!

答案 1 :(得分:1)

我绝不会将转换代码放入您的存储库。

  • 存储库从其他关注点抽象数据访问。视图摘要
  • 来自其他问题的UI格式。

混合两者只是把你所有细心的脱钩。

MVC的书籍定义强烈暗示应该在控制器内完成转换:

控制器接收输入并通过对模型对象进行调用来启动响应。控制器接受来自用户的输入并指示模型和视口基于该输入执行操作。