2017-07-18 59 views
1

我是新來ASP.Net核心(但不是ASP.Net),我想知道什麼訪問現有的SQL Server數據庫的最佳途徑?ASP.Net核心 - 訪問數據庫的最佳實踐?

我跟着一些PluralSight教程,但他們似乎都使用Code First方法。

微軟確實有some example code顯示如何訪問現有的數據庫。

我問這個問題的原因是我們公司聘請了一家外部公司爲我們編寫一些代碼,他們的解決方案是通過存儲過程執行數據庫CRUD操作的所有全部

所以,在SQL Server中,他們已經基本上在3個存儲過程的每一個應用程序使用的表,例如:

dbo.CustomerGet 
dbo.CustomerDelete 
dbo.CustomerUpdate 

而且他們的ASP.Net核心代碼只包含負載小功能,像這樣:

public IEnumerable<Order> GetCustomerOrders(int customerID) 
{ 
    var itemsParams = new Dictionary<string, object>() 
    { 
     { "@CustomerID", customerID} 
    }; 
    var items = _dataAccess.GetData("dbo.CustomerOrdersGet", itemsParams, 
     reader => new Order() 
     { 
      OrderID = reader.GetInt32(0), 
      OrderName = reader.GetString(1), 
      // ...etc... 
     }); 
    return items; 
} 

GetData()功能只是創建到數據庫的新連接,並調用存儲過程:

public IEnumerable<T> GetData<T>(string storedProcedureName, Dictionary<string, object> parameters) 
{ 
    using (var conn = new SqlConnection(_connectionString)) 
    { 
     conn.Open(); 
     return conn.Query<T>(storedProcedureName, parameters, commandType: CommandType.StoredProcedure); 
    } 
} 

他們的代碼在任何地方都沒有提及DbContext

他們的一些SP也只能做一個SELECT,但他們只需要一個PageNumber和PageSize參數,爲網頁獲取一頁數據,再加上一個「SortBy」參數。

再一次,在「我的世界」中,通過可管理的數據大小,我總是一次加載所有數據,並讓客戶端在顯示結果頁面後處理並處理排序。

我知道StackOverflow並不是問「你的意見是什麼......」的理想場所嗎?輸入問題,但我會很感激一些反饋。

一個真正的技術問題,這是其他開發商,特別是考慮到ASP.Net核心如何利用新的(和不斷變化)是非常有用的。

我從來沒有用「普通」ASP.Net編寫這樣的代碼,並且想知道ASP.Net Core開發人員對這種編碼方法的看法。 (順便說一句,我對存儲過程非常舒服,我在內部應用程序中使用它們很多,但只是在數據密集型操作中,或者當我不希望大數據集被傳遞時大約在我的SQL Server和ASP.Net代碼之間,而且我從來沒有使用過存儲過程,例如,在一個表上執行一個bog標準的SELECT。)

+1

這與'ASP.NET Core'無關,我的意思是在其他使用其他框架和編程語言的應用程序中發生了同樣的情況。 – Fabio

+1

無論哪種方式都是可行的。兩者都有其優點和缺點。你說得對,SO *不是那個網站。 –

回答

-1

ASP.NET代碼看起來很好,因爲它們有創建了一個通用方法來調用存儲過程並從SQL數據庫中獲取數據集。 他們只是調用相同的泛型方法來獲取信息,然後在Reader的幫助下綁定結果集。而且,即使對Select語句使用存儲過程也是一個很好的選擇,因爲如果您將在代碼中直接編寫Select Query,那麼它可能會導致SQL注入,因此如果您在SQL Server級別使用存儲過程並實現分頁,將一次獲取所有數據,然後顯而易見,SP調用需要更多時間,然後將該數據保存在ASP.NET對象中,然後應用ASP.NET分頁,這是不推薦的。所以其良好的有:

一)通用方法在ASP.NET SP呼叫
b)使用存儲的特效,以避免SQL注入
c)利用在SQL存儲的特效paginations以提高性能(這取決於捲上你在表格中有數據)