在一个MVC3项目中,我使用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使用静态方法。这不是会引起一些内存问题吗?
很抱歉问了这么多问题...我在试着纠正这件事。
谢谢你,米格尔
发布于 2012-10-08 23:36:19
稍后回答,但我想指出的是,您的存储库实现实际上是一个“数据访问对象”。存储库处理整个聚合,即。一组属于一起的东西。理想情况下,您的接口应该只接受和返回聚合根类型的对象(例如,Repository<User>可能具有void Update(User user) {}或IEnumerable<User> Find(...) {}方法)。
任何持久性机制的使用或存在都是一个实现细节,通常不属于存储库接口,也不会使用SQL。
https://stackoverflow.com/questions/9847886
复制相似问题