在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使用静态方法。 这不会引起一些记忆问题吗?
抱歉这么多问题......我正在努力做到这一点。
谢谢你, 米格尔
答案 0 :(得分:0)
迟到的答案,但我想指出您的存储库实现实际上是一个“数据访问对象”。存储库处理整个聚合,即。一组属于一起的东西。理想情况下,您的界面应该只接受和返回聚合根类型的对象(例如,Repository<User>
可能有方法void Update(User user) {}
或IEnumerable<User> Find(...) {}
)。
任何持久性机制的使用或存在都是一个实现细节,通常不属于存储库接口,也不会说SQL。