後面的故事到這是一個同事不喜歡我們的企業庫數據訪問塊標準化因爲企業庫數據訪問塊設計決策
- 它需要在這需要每一個項目太多引用的事實數據庫訪問
- 我們並不需要它提供的所有功能
- 他認爲DbCommand/SqlCommand應該內部存儲在數據庫對象中,而不必讓數據庫構建一個sqlcommand並要求用戶管理其狀態外部
- 他不喜歡在添加參數時必須指定類型,他認爲重載應該爲您推斷出類型。 *不喜歡那個企業庫是通用的所有數據庫,當我們的系統顯然只是永遠將是兼容的SQL服務器反正
我個人想使用企業庫,而不是他的家溶液生長保持,但它的確讓我提出了一些問題。
爲什麼企業庫或其他數據庫抽象層爲基本類型提供AddParameter重載?
例
db.AddInParameter(dbCommand,
"EmployeeID", DbType.Int32, 1);
會是什麼原因,或者一些原因,他們不只是提供如int所有的數據類型重載,而不是僅考慮對象,並強制用戶指定類型。
db.AddInParameter(dbCommand, "EmployeeID", 1);
,我能想到的是一些原因...
如果不指定每一個類型映射爲過載以下情況可能發生。
比方說你有INT過載而不是char
char c = 'R'
db.AddInParameter(dbCommand, "Initial", c);
編譯器將解決超載爲int而不是char和因爲存儲過程expeected類型是char拋出一個錯誤。
另一個含義是,如果我想模擬數據庫類,我現在有一個重載的接口,我需要實現而不是一個。
我的另一大問題是... ...
爲什麼數據訪問塊需要檢索命令對象,然後傳回在後續調用,而不是僅僅在內部管理其狀態?
using (var cmd = db.GetStoredProcCommand("AddEmployee"))
{
db.AddInParameter(cmd, "@Name", DbType.String, name);
代替
using(var db = new Database())
{
db.CreateStoredProcCommand("AddEmployee")
db.AddInParameter("@Name", DbType.String, name);
我希望看到你們的想法。
感謝