【发布时间】:2012-04-08 12:37:06
【问题描述】:
在一个 MVC 3 项目中,我使用 EF4、IoC 和 Agatha-RRSL 作为我的服务层。
幸运的是,这周我找到了 Dapper,我正在从 EF4 迁移到 Dapper!
通常我在我的 Agatha 请求处理程序中注入一个通用存储库 ...
但是我应该如何使用 Dapper?
1) 我应该在 Agatha 处理程序中注入一个 IDbConnection 吗? 然后在处理程序中我将它与 Dapper Query 或 Dapper Execute 一起使用? 这是可测试的吗?那么嘲笑呢?
2) 我应该为 Dapper 创建一个通用存储库吗? 也许存储库会是这样的:
public class Repository {
private IDbConnection _connection;
public Repository(IDbConnection connection) {
_connection = connection;
} // Repository
public Int32 Execute(String sql, dynamic param = null) {
return _connection.Execute(sql, param);
} // Execute
// Query code
}
IDbConnection 会被注入到这里。
并且存储库将被注入到处理程序中。
不确定如何测试这个...
3) 我应该将所有代码都放在处理程序中吗?
using (SqlConnection connection = new SqlConnection(connectionString)) {
connection.Execute(@"insert Roles(Name) values (@name)", new { name = "Role" });
}
但是测试呢?
4) 我意识到 Dapper 使用静态方法。 这不会引起一些内存问题吗?
抱歉有这么多问题......我正在努力解决这个问题。
谢谢你, 米格尔
【问题讨论】:
-
对于插入记录,您可能还想查看 Dapper-Rainbow。 (在 NuGet 上可用)。 PS: 3) - dapper 需要一个开放的连接。
-
是的,我刚刚找到了 Dapper-Rainbow ...但我正在考虑在 3 中打破该代码:保存连接的数据库、事务的会话和方法的存储库。你怎么看?我认为它更适合测试。你怎么看?我将在这里发布我的代码...
标签: testing inversion-of-control dapper agatha-rrsl