我正在使用一种模式,其中构造函数将IDbConnection实例注入到我的类中,然后在与Dapper一起使用以使用数据库中的对象填充List之前将其分配给局部变量。
我知道最佳做法是将连接对象包装在using语句中,但是当我尝试重用连接来重新加载对象时,我不能因为连接已被处理掉了。我可以在LoadValues方法中打开和关闭连接,并信任类析构函数来处理我的对象而不是使用using语句吗?也许有一种更好的方式我没有考虑过?
这是我的班级:
Public Class AmountLookup : Implements INAmountLookup
Private _listOfRecords As New List(Of NAmount)
Private ReadOnly _mfConnection As IDbConnection
Private ReadOnly _fRepository As IFRepository
Sub New(mfConnection As IDbConnection,
fRepository As IFRepository)
_mfConnection = mfConnection
_fRepository = fRepository
LoadValues()
End Sub
Public Sub LoadValues() Implements INAmountLookup.LoadValues
LoadValues(DateGateway.GetLastWorkingDayOfPreviousMonth)
End Sub
Public Sub LoadValues(currentNDate As Date) Implements INAmountLookup.LoadValues
_listOfRecords.Clear()
Dim sql = String.Format(SqlFactory.GetSql(DBC.SQLs.ValidatedNAmounts),
_fRepository.GetFormattedListOfFsForSqlSearch,
Format(currentNDate, DBC.DateFormats.MfDate))
Using _mfConnection
_mfConnection.Open()
_listOfRecords = _mfConnection.Query(Of NAmount)(sql).ToList
_mfConnection.Close()
End Using
End Sub
Public Function Find(fCodeValue As String) As NAmount Implements INAmountLookup.Find
Dim myList = _listOfRecords.Where(Function(x) x.FCode = fCodeValue)
Return myList.SingleOrDefault()
End Function
End Class
答案 0 :(得分:1)
如果您正在通过连接,那么您不应该处置它,除非您还要承担连接的生命周期的责任,即通过连接的事情知道他们正在将连接的所有权转移给您的班级,如果您的课程成为所有者后,不会尝试将其交给其他人或尝试使用。
听起来这不是那种情况(因为其他东西也试图使用它)所以你应该做两件事之一: