2013-07-05 67 views
1

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

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

什么是正确的做法呢?

,我将非常感激。

+0

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

回答

2

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

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