在没有实体框架的情况下在MVC中保存数据?

asp.net asp.net-mvc c# dapper

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

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

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模式的目的和一般的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模式工作,您需要Model(部分ViewModel)在View中显示您的数据。控制器将处理您的应用程序流程。

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

我认为你可以使用Dapper的Repository模式和EF一样。

主要的事情是要注意你的应用程序不应该持久感知。您可以使用Dapper进行开发,之后您还可以在UI级别上提供对EF的支持,而无需进行太多更改。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因