我应该在控制器中打开数据库连接吗?

时间:2012-12-03 17:03:50

标签: c# asp.net asp.net-mvc

我的控制器需要获取传递回视图的数据。我应该在哪里打开连接以传递到存储库?这是一个例子。这是我的一个控制器的一部分。

using (var connection = this.GetActiveConnection())
{
    var repository = new RefRepository(connection);
    var codes = repository.GetPoACodes();    
}

在控制器中打开连接是不好的做法吗?如果我没有通过控制器传递它,我应该在哪里将连接传递给存储库?

2 个答案:

答案 0 :(得分:4)

实际上存储库必须自己处理连接,它不应该是控制器关注的问题。 控制器类必须保持薄,如果它变胖,那将是代码味道。

如果您可以使用依赖注入框架(如Ninject,StructureMap,...)来连接这些依赖项,以处理DbContext或Session和SessionFactory(EF或NHibernate),Transaction或即Unit,这将是一个非常好的做法。如果你想到目前为止,工作模式,异常处理和记录。

如果您正在使用Visual Studio,那么在项目模板中还有一个创建存储库的选项,您可以创建示例项目,阅读代码并了解代码的组织方式。

在此article中,在Web API标题下,您可以了解如何执行此操作。

答案 1 :(得分:1)

不,您不应该在控制器上打开数据库连接。

控制器应与您的“域模型”对话,这与您的数据库模式不同。

在您的情况下,您的存储库可能必须处理它。

或者甚至更多,例如,如果您使用Entity Framework或NHibernate,那么最好让他们处理这件事。