2011-08-10 121 views
3

字段類型就是金錢,如果我把一個「0」或「1」在場上我得到這個錯誤:sqlite的實體框架 - 錯誤:「指定的轉換無效」

System.Reflection.TargetInvocationException: 

Exception has been thrown by the target of an invocation. ---> 
System.InvalidCastException: Specified cast is not valid. 

at System.Data.SQLite.SQLiteDataReader.VerifyType(Int32 i, DbType typ) 
at System.Data.SQLite.SQLiteDataReader.GetBoolean(Int32 i) 

--- End of inner exception stack trace --- 

這是從模型設​​計:

<Property Name="Amount" Type="decimal" Precision="53" /> 

====

<EdmScalarPropertyAttribute(EntityKeyProperty:=False, IsNullable:=True)> 
<DataMemberAttribute()> 
Public Property Amount() As Nullable(Of Global.System.Decimal) 
    Get 
     Return _Amount 
    End Get 
    Set(ByVal value As Nullable(Of Global.System.Decimal)) 
     OnAmountChanging(Value) 
     ReportPropertyChanging("Amount") 
     _Amount = StructuralObject.SetValidValue(value) 
     ReportPropertyChanged("Amount") 
     OnAmountChanged() 
    End Set 
End Property 

Private _Amount As Nullable(Of Global.System.Decimal) 
Private Partial Sub OnAmountChanging(value As Nullable(Of Global.System.Decimal)) 
End Sub 

Private Partial Sub OnAmountChanged() 
End Sub 

代碼獲取錯誤:

Dim Query = From c In EnData.Transactions Where c.TranID = 660 ' this tran is the amount 0 

     For Each tran In Query 'Error here 

     Next 
+0

向我們顯示代碼。 –

+0

我添加了一些代碼,這是你在找什麼? – Ezi

+0

你能向我們展示你設置金額的代碼嗎? – arviman

回答

4

我得到了問題......它不是數量字段。另一列是位型的,有時它不喜歡我寫錯或真的方式。導致問題。

解決方法是將1用於true,將0用於false,即始終可以。

+1

使用EF 6.02和SQLite 1.0.91,這仍在發生,因此而浪費了一天的時間。非常感謝!!!! – Aymen

0

我爲Microsoft SQL Server編寫SQL。如果以下示例對SqLite無效,請讓我知道,我將刪除此答案。

問題:什麼是:StructuralObject.SetValidValue(value)?這是一個自定義函數嗎?如果是這樣,你可以定義一下嗎?

可能修改你的VB代碼做以下幫助:

Public Property Amount() As System.Decimal 
    Get 
     Return _Amount 
    End Get 
    Set(ByVal value As Global.System.Decimal) 
     OnAmountChanging(Value) 
     ReportPropertyChanging("Amount") 
     If value = 0 Then 
      _Amount = 0.00M 
     Else If value = 1 Then 
      _Amount = 1.00M 
     Else 
      _Amount = StructuralObject.SetValidValue(value) 
     End If 
     ReportPropertyChanged("Amount") 
     OnAmountChanged() 
    End Set 
End Property 

通常情況下,我更傾向於將「最真實」的情況下在上面,但我的VB技能不是那麼好。

我希望這會有所幫助。

+0

這是自動生成的代碼,這裏沒有Null問題。 – Ezi

+0

@Ezi:更新代碼以測試1和0.也許'SQLite'或'SetValidValue'將輸入解釋爲'Integer'或'Boolean'。上面指出的值應該強制1和0加倍(M代表金錢)。 – jp2code

+0

感謝您的幫助,請參閱問題中的編輯。我發現問題在哪裏。 – Ezi

相關問題