【问题标题】:ViewModel objects to EF model entities conversion where?ViewModel 对象到 EF 模型实体的转换在哪里?
【发布时间】:2011-06-11 05:55:20
【问题描述】:

我目前有一个基于 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);
        }

【问题讨论】:

  • 由于您使用的是 valueinjecter 我强烈建议您从这里查看现场演示的源代码awesome.codeplex.com,查看 Cruder (Controller) 和 IBuilder 的实现

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


【解决方案1】:

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

我认为将它放在存储库中不是一个好主意,除非它不是通用的。这应该是因为在我看来通用存储库很摇滚!

【讨论】:

    【解决方案2】:

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

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

    将两者混为一谈只会让你小心翼翼地脱钩。

    MVC 的书上定义强烈暗示应该在控制器内部进行转换:

    "控制器接收输入并通过调用模型对象来发起响应。控制器接受来自用户的输入并指示模型和视口根据该输入执行操作。"

    【讨论】:

      猜你喜欢
      • 2011-03-01
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多