将数据保存在没有实体框架的 MVC 中

本文关键字:框架 MVC 实体 数据 保存 存在 | 更新日期: 2023-09-27 18:34:26

我看到的大多数MVC示例似乎都使用实体框架。 我目前正在编写一个不使用 EF(改用 Dapper)的 MVC 应用程序,我想知道我应该在哪里包含数据持久性逻辑?

我的第一个想法是将它与我的模型的类一起放置。 这意味着我的模型类将如下所示:

class User
{
   public int id {get; set;}
   public string name {get; set;}
   Create(string name)
   {
      // dapper to perform insert
   }
   Remove(int id)
   {
     // dapper to perform delete
   }
   //Update(),Delete() etc.
}

但是我没有经常使用MVC,所以我不确定这是否是一种常见的做法。

将数据持久性逻辑与模型放在一起是一种好的做法,还是应该采用不同的方法?

另外,我相信Stack Exchange使用MVC和Dapper - 如果有人知道他们在任何地方谈论过他们如何构建代码,请随时指出我。

将数据保存在没有实体框架的 MVC 中

您不会期望必须打开计算机并按下硬盘驱动器上的按钮才能将数据保存到其中,对吗?

基本上,MVC 模式和一般的 SOLID 设计原则的目的是分离您的关注点。将与保存、修改或更新数据库相关的逻辑放在模型中,其职责是成为包含数据的对象,这与您应该在 MVC 中订阅的模式的哲学背道而驰。

控制器是要执行逻辑以保存信息的位置,但仍有一个数据访问层,与数据库交互的关注点被抽象到该层。

因此,您将拥有:

public class MyController {
    IDataAccessLayer _dataAccessLayer;
    public MyController(IDataAccessLayer dataAccessLayer) {
        _dataAccessLayer = dataAccessLayer;
    }
    public ActionResult Create(Model myModel){
        _dataAccessLayer.InsertIntoDatabase(myModel);
        return View();
    }
}

根据MVC的设计,持久性永远不会成为问题。您可以使用任何您想要的ORM。要使 MVC 模式正常工作,您需要模型(部分视图模型)才能在视图中显示数据。控制器将处理您的应用程序流。

现在,您可以从控制器调用任何进程来保存数据。

我认为您可以将存储库模式与 Dapper 一起使用,就像 EF 一样。

主要需要注意的是,您的应用程序不应具有持久性意识。可以使用 Dapper 进行开发,以后还可以提供对 EF 的支持,而无需在 UI 级别进行太大更改。