2012-03-23 65 views
4

在MVC 3項目中,我使用EF4,IoC和Agatha-RRSL作爲服務層。Dapper。 IoC,Testing和Agatha

幸運的是,本週我發現了Dapper,並且我正從EF4轉向Dapper!

通常我注入通用庫在我的阿加莎請求處理程序...

但是我應該如何使用小巧精緻的?

1)我應該在Agatha Handler中注入一個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

對於插入記錄,你可能也想看看Dapper-Rainbow。 (在NuGet上可用)。 PS:3) - dapper恢復開放連接。 – Alex 2012-03-24 08:09:29

+0

是的,我剛剛找到了Dapper-Rainbow ......但我正在考慮打破3:包含連接的數據庫中的代碼,以及方法的轉換和存儲庫的會話。你怎麼看?我認爲測試更好。你怎麼看?我會在這裏發佈我的代碼... – 2012-03-24 11:18:39

+0

你finnaly做了什麼? – GorillaApe 2012-10-25 18:19:48

回答

0

晚的答案,但我想指出的是您的倉庫實現是一個真正的「數據訪問對象」。存儲庫處理整個集合,即。一組屬於一起的東西。理想情況下,您的界面只應接受並返回聚合根類型的對象(例如,Repository<User>可能有方法​​或IEnumerable<User> Find(...) {})。

任何持久性機制的使用或存在都是實現細節,通常不屬於存儲庫接口,也不會說SQL。