我使用Dapper
来访问我的数据,如下面的代码所示。只有两个函数,但真正的代码可以有hundreads。我想在特定的数据库表中登录所有执行的SQL语句。这应该是所有DataRepository类函数的通用。
实现此类功能的最佳方法是什么,以避免在SelectCustomers
,SelectEmployees
等每个单一函数中重复此功能?请分享一个例子。
Public Class BaseRepository
Protected Shared Function OpenConnection() As IDbConnection
Dim connection As IDbConnection
connection = New SqlConnection(MyAppSettings.PascomDB)
connection.Open()
Return connection
End Function
End Class
Public Class DataRepository
Inherits BaseRepository
Public Function SelectCustomers() As IEnumerable(Of Customers)
Using connection As IDbConnection = OpenConnection()
Dim query As String = "SELECT * FROM Customers"
Return connection.Query(Of Customers)(query)
connection.Close()
End Using
End Function
Public Function SelectEmployees() As IEnumerable(Of Employees)
Using connection As IDbConnection = OpenConnection()
Dim query As String = "SELECT * FROM Employees"
Return connection.Query(Of Employees)(query)
connection.Close()
End Using
End Function
End Class
答案 0 :(得分:1)
您可以保持简单,只需向基类添加一个方法:
Public Class BaseRepository
' ...
Protected Shared Function LogAndQuery(Of T)(query As String) As IEnumerable(Of T)
Using connection As IDbConnection = OpenConnection()
' TODO: add logging of the query here
Return connection.Query(Of T)(query)
' connection.Close() - note, this is unreachable code, but it's being disposed anyway
End Using
End Function
End Class
并在您的存储库方法中使用它:
Public Function SelectCustomers() As IEnumerable(Of Customers)
Dim query As String = "SELECT * FROM Customers"
Return LogAndQuery(Of Customers)(query)
End Function