Dostaję sporadyczne "Nie można rzucić obiektu typu" System.Int32 ", aby wpisać" System.String "Wyjątki w .SingleorDefault() w poniższym kodzie. Działa 9/10 razy, ale losowo rzuca wyjątek. Upewniłem się, że ustawienie ID, które przekazuję, nie ma wartości zerowych, a dane w tabeli zawsze istnieją dla identyfikatora settingID i zawsze przekazuję wartość SettingID jako liczbę całkowitą.Nie można rzutować obiektu typu "System.Int32" na typ "System.String"
Wszelkie pomysły na temat tego kodu.
Oto Info Wyjątek:
System.InvalidCastException: Nie można rzutować obiektu typu 'System.Int32' wpisz 'System.String'.
w System.Data.SqlClient.SqlBuffer.get_String()
w Read_CPT_Setting (ObjectMaterializer`1)
w System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
w System.Linq. Enumerable.SingleOrDefault [TSource] (źródło IEnumerable`1)
w System.Linq.Queryable.SingleOrDefault [TSource] (źródło IQueryable`1)
w CPT.Service.SettingLinqProvider.GetSettingFromDBById (Int32 SettingId)
KOD:
Public Function GetSettingFromDBById(ByVal SettingId As Integer) As ReturnObject(Of Model.ISettingBase)
Dim retObj As New ReturnObject(Of Model.ISettingBase)
Dim dbSetting As CPT_Setting
Try
Dim _cptDB As New CPT.Data.CPTLinqRepository.DB(_connString)
Using _cptDB
dbSetting = (From s In context.CPT_Settings _
Where s.SettingId = settingId _
Select s).SingleOrDefault
If dbSetting IsNot Nothing Then
retObj.ReturnValue = Mapping.Setting.MapDBToModel(dbSetting)
End If
End Using
Catch ex As Exception
retObj.ReturnValue = Nothing
retObj.AddErrorMessage("Error returning the site: " & ex.Message)
_log.Error(ex.Message, _userId, ex)
End Try
If retObj.ReturnValue Is Nothing Then
retObj.AddErrorMessage("Site Not Found.")
End If
Return retObj
End Function
zaktualizowałem powyższy kod z niektórych rejestrowania na miejscu po każdej linii.
Public Function GetSettingFromDBById(ByVal SettingId As Integer) As ReturnObject(Of Model.ISettingBase)
Dim retObj As New ReturnObject(Of Model.ISettingBase)
Dim dbSetting As CPT_Setting
Dim SettingsList As New List(Of CPT_Setting)
Dim errStr As String = " ENTER "
Try
Dim _cptDB As New CPT.Data.CPTLinqRepository.DB(_connString)
Using _cptDB
errStr &= " - Inside Context "
If _cptDB Is Nothing Then
errStr &= " - With Context is Nothing "
_log.Error("Unusual Object - Unable to create connection object - Object is NOTHING", _userId)
End If
If System.DBNull.Value.Equals(_cptDB) Then
errStr &= " - With Context is NULL "
_log.Error("Unusual Object - Unable to create connection object - Object is NULL", _userId)
End If
errStr &= " - Querying With SettingID = " & SettingId.ToString()
Dim dbSettingTemp = (From s In context.CPT_Settings _
Where s.SettingId = settingId _
Select s)
If dbSettingTemp Is Nothing Then
errStr &= " -- Nothing is returned from DB - Object is NOTHING -- "
_log.Error(errStr, _userId)
End If
If System.DBNull.Value.Equals(dbSettingTemp) Then
errStr &= " -- Nothing is returned from DB - Object is NULL -- "
_log.Error(errStr, _userId)
End If
errStr &= " -- Before SingleOrDefault -- "
dbSetting = dbSettingTemp.SingleOrDefault
errStr &= " -- After SingleOrDefault -- "
If dbSetting IsNot Nothing Then
If System.DBNull.Value.Equals(dbSetting) Then
errStr &= " - NULL OBJECT RETURNED - Before Mapping "
_log.Error("Unusual Exception - NULL OBJECT RETURNED " & errStr, _userId)
End If
retObj.ReturnValue = Mapping.Setting.MapDBToModel(dbSetting)
errStr &= " - After Mapping With SettingID=" & dbSetting.SettingId.ToString() & " SettingName=" & dbSetting.SettingName.ToString() & " StartDate=" & dbSetting.StartDate.ToShortDateString() & " EndDate=" & dbSetting.EndDate.ToShortDateString()
Else
errStr &= " - DBSetting Is Nothing "
_log.Error("Unusual Object - No Data Retrieved for SettingID=" & SettingId.ToString() & " " & errStr, _userId)
End If
End Using
Catch ex As Exception
retObj.ReturnValue = Nothing
retObj.AddErrorMessage("Error returning the site: " & ex.Message)
_log.Error("Unusual Exception for SettingID=" & SettingId.ToString() & "--" & errStr & "--" & ex.Message, _userId, ex)
End Try
If retObj.ReturnValue Is Nothing Then
retObj.AddErrorMessage("Site Not Found.")
_log.Info("Unusual Object - MRDD Solutions - No Data Retrieved for SettingID=" & SettingId.ToString() & " " & errStr, _userId)
End If
Return retObj
End Function
Pamiętaj: DB ma wszystkie wiersze dla wszystkich settingIDs wymienionych w poniższych komunikatów.
Wyniki:
Scenariusz 1:
Niezwykłe Object - brak danych Źródło dla SettingID = 142176 ENTER - Wewnątrz Kontekst - Zapytania Z SettingID = 142176 - - - Przed SingleOrDefault Po SingleOrDefault - - DBSetting Is Nothing
Niezwykły obiekt - Rozwiązania MRDD - Brak danych dla SettingID = 142176 ENTER - Wewnątrz kontekstu - Zapytanie z ustawianiemID = 142176 - Przed SingleOrD EFAULT - - Po SingleOrDefault - - DBSetting Is Nothing
Scenariusz 2
Niezwykłe Wyjątek dla SettingID = 138145-- ENTER - Wewnątrz Kontekst - Zapytania Z SettingID = 138145 - zanim SingleOrDefault - - - Po SingleOrDefault - - Specyfikacja rzutowania jest nieprawidłowa.
Niezwykłe Object - MRDD Solutions - Nie Źródło dla SettingID = 138145 wprowadzania danych - Wewnątrz kontekście - odpytywanie Z SettingID = 138145 - zanim SingleOrDefault - - Po SingleOrDefault -
Scenariusz 3
Niezwykły wyjątek dla SettingID = 164638 - ENTER - Inside Context - Zapytanie z SettingID = 164638 - Before SingleOrDefault - --Index był poza granicami tablicy.
Niezwykłe Object - MRDD Solutions - Nie Źródło dla SettingID = 164638 wprowadzania danych - Wewnątrz kontekście - odpytywanie Z SettingID = 164638 - Przed SingleOrDefault -
Jakiego typu jest kolumna SettingID w bazie danych? –
Czy istnieje niezgodność typów między dowolnymi właściwościami klasy 'CPT_Setting' i kolumnami tabeli bazy danych? Podobnie jak: kolumna jest tekstem, a odpowiednią właściwością jest int. –
Nie. Nie ma niezgodności między kolumnami DB a właściwościami DBML/Class. Upewniłem się, że to jest poprawne z drugim zestawem oczu. – ravi