在ASP .NET WEB API中实例化数据访问对象

时间:2013-07-05 07:41:03

标签: asp.net-web-api

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

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

    我将非常感激。

1 个答案:

答案 0 :(得分:2)

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

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