【问题标题】:Passing data from ViewModel to DataModel将数据从 ViewModel 传递到 DataModel
【发布时间】:2017-04-10 19:28:27
【问题描述】:

我正在尝试更好地学习 C# 和 MVC,并且正在开展一个项目来帮助我这样做。作为其中的一部分,我正在尝试创建一个用户注册并登录到我的网站。我正在使用 Entity Framework 并尝试遵循我知道或遇到的所有最佳实践,但我认为我对一些事情有点混淆了。

我创建了一个表示层、一个 DataLayer 和一个 BusinessLayer。这基本上给我留下了一个问题,因为我不能做看起来很明显的事情,因为这将是一个循环依赖,而且无论如何这是一件坏事,我想知道我是否以正确的方式去做。

在我的表示层中,我放置了我的 ViewModel 和控制器。

在我的 DataLayer 中是我所有的 EF 类和模型。

我也有一个 BusinessLayer,但这里什么都没有(这里还没有 100% 应该放的东西)

我的表示层显然依赖于我的 DataLayer,但是将数据从 PresentationLayer 中的 ViewModel 传递回 DataLayer 中的数据模型以更新数据库的最佳方法是什么?在视图中,用户基本上将输入登录信息,然后需要将其发送到 DataLayer 中的我的实体,然后使用实体 EF 访问数据库。我无法将我的表示层作为依赖项添加到我的 DataLayer,因为这会创建循环依赖项。

我已阅读有关 automapper 的信息,但不确定这是否正确或该逻辑应该放在哪里,它应该在模型中还是单独的类中以及在哪个层中?我也尝试过使用 Unity 和依赖注入做一些事情,但我认为我现在对实际需要什么感到困惑,并将我正在阅读的内容应用到我实际尝试做的事情上。我可以通过将所有内容放在一个项目中来完成这项工作,但显然我正在尝试从设计的角度正确地做到这一点。

【问题讨论】:

    标签: c# entity-framework asp.net-mvc-5


    【解决方案1】:

    从我的 ViewModel 中传递数据的最佳方式是什么? PresentationLayer 回到 DataLayer 中的数据模型进行更新 数据库?

    使用 Automapper 不会阻止我们产生循环依赖。将一个映射到另一个对象只是为了我们的方便。

    只要我们不在 DataLayer 中实例化 ViewModel 类(我们不应该需要),我们不会有循环依赖。

    Here 是示例 - 通过调用 UserService 将数据从 ViewModel 传递到 DataModel。

    [HttpPost]
    public async Task<ActionResult> Create(UserCreateUpdateModel model)
    {
       if (ModelState.IsValid)
       {
          var user = new User
          {
             UserName = model.UserName,
             FirstName = model.FirstName,
             LastName = model.LastName
          };
    
          await _userService.AddUserAsync(user);
          return RedirectToAction("List");
        }
        return View("Create", model);
    }
    

    【讨论】:

    • 注意这个类也使用依赖注入。那里有很多好的 nuget 包。我喜欢的一个是 SimpleInjector。这将意味着您不是“更新”服务,而是将它们注入,这将导致更多可测试的代码
    • 我同意。我使用 Autofac,但你可以使用任何 IoC 容器;它们都是很棒的容器。上面的代码是可单元测试的——here 是实现,here 是单元测试。
    • 是的,您的示例很棒...只是指出了依赖注入 (DI) 和控制反转 (IoC) 的使用
    • 感谢 Win 的澄清。我想我有时会混淆所有不同的概念。
    【解决方案2】:

    要将数据从视图传递到控制器,您有三个选项: 1.使用强模型类型 2.使用FormCollection对象(不推荐) 3.使用参数

    下面是一个关于如何将参数从视图传递到控制器的好教程:

    https://www.codeproject.com/Articles/639709/Getting-Data-From-View-to-Controller-in-MVC

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 2018-12-25
      • 2021-08-25
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多