1

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

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

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

4

2 回答 2

4

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

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

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

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

于 2012-12-03T17:07:50.893 回答
1

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

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

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

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

于 2012-12-03T17:21:22.213 回答