Asp.net web api 在ASP.NETWebAPI中实例化数据访问对象

Asp.net web api 在ASP.NETWebAPI中实例化数据访问对象,asp.net-web-api,Asp.net Web Api,我必须为我当前的项目开发一个webapi。我的数据库是POSTGRESQL,我没有使用entityframework。我有自己的数据访问层。现在,在每个控制器的每个(GET,PUT,POST,DELETE等)方法中,我要访问数据库。现在我的问题是,实例化数据访问层对象的正确方法是什么。以下两种方法:- 在每个控制器的每个方法中实例化它,并在完成工作后将其销毁。但我认为每次实例化和销毁对象都是一件代价高昂的事情 全局实例化一次,并从每个控制器的每个方法访问它 正确的方法是什么 我将非常感谢。这个问

我必须为我当前的项目开发一个
webapi
。我的数据库是
POSTGRESQL
,我没有使用
entityframework
。我有自己的数据访问层。现在,在每个控制器的每个(
GET
PUT
POST
DELETE
等)方法中,我要访问数据库。现在我的问题是,实例化数据访问层对象的正确方法是什么。以下两种方法:-

  • 在每个控制器的每个方法中实例化它,并在完成工作后将其销毁。但我认为每次实例化和销毁对象都是一件代价高昂的事情
  • 全局实例化一次,并从每个控制器的每个方法访问它
  • 正确的方法是什么


    我将非常感谢。

    这个问题的正确答案在很大程度上取决于您是如何实现数据访问层的。话虽如此,还是有可能给你一些可以帮助你解决问题的一般性建议。在C#中创建单个对象通常不是一个特别昂贵的操作,而是附加到这些对象的资源往往很昂贵。由于postgresql C#提供程序支持连接池(我假设您正在使用),因此不会在每次实例化一个数据访问对象时创建到数据库的新连接,而是将连接保存在池中,并根据代码的要求进行分配。因此,为了避免复杂性和状态处理,最简单的方法可能是在控制器的每个方法中创建一个新对象


    或者,您可以将数据访问对象作为私有字段添加到控制器中,并在控制器的构造函数中实例化它,假设所有控制器方法都需要数据访问层。这可能有助于避免一些代码重复,并且在这两种情况下,对象的生命周期非常相似,即每个请求一个对象。

    我认为您需要向我们展示至少一些来自数据访问层对象的代码。如果在每个方法中都创建/放弃它,那么(很可能)就不必处理线程同步问题。如果您尝试创建并重用它,可能会出现这种情况。