1

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

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

正确的做法是什么?

我将非常感激。

4

1 回答 1

2

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

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

于 2013-07-07T12:06:22.947 回答