2010-02-05 86 views
0

在VB版本中保存具有以下異常的異常主鍵的行時: '未找到'Decimal'類型的公共成員'ChangeTypeTo'。SubSonic 3中的Casting問題

這發生在ActiveRecord.VB文件行3406:

 Public Sub SetKeyValue(value As Object) Implements IActiveRecord.SetKeyValue 
     If value IsNot Nothing AndAlso value IsNot DBNull.Value Then 
      Dim settable = value.ChangeTypeTo(Of Integer)() 

我可以改變最後一行:

Dim settable = CInt(value) 'value.ChangeTypeTo(Of Integer)() 

這將解決這個問題,直到我重新編譯.TT文件。

我的問題是,我怎麼能改變ActiveRecord.tt文件中的這個? 在TT文件中的代碼看起來是這樣的:

Dim settable = value.ChangeTypeTo(Of <#=tbl.PK.SysType#>)() 

任何幫助表示讚賞。

謝謝

回答

1

我也有VB模板的各種問題。這似乎是Subsonic開發人員的焦點在C#中。最後,我選擇在另一個項目中使用C#模板,並從我的VB主應用程序中引用它。你試圖做的改變的問題是你試圖用一個具體的方法替換一個通用的方法,但這並不是更好。 <#=tbl.PK.SysType#>引用主鍵的類型。如果您只有整數主鍵,則可以將該模板編輯爲Dim settable = CInt(value)。否則,您需要GetType才能知道類型value,然後輸入select case,併爲每種類型的方法進行適當的轉換。

+0

但是,錯誤代碼的內在部分是將您的整數主鍵轉換爲Decimal。爲什麼不搜索回來? – Apocatastasis 2010-02-10 05:44:37

+0

感謝您的意見。你說得對,VB模板似乎有問題。我按照你的建議做了,我在我的解決方案中添加了一個C#類庫項目,並使用了C#模板。我改變了我的參考(我的VB模板也在一個單獨的項目中)到C#項目,現在它完美地工作。 再次感謝。 gm – 2010-02-11 04:09:03

0

生成的代碼是正確的。你正在試圖將十進制值轉換爲整數,這沒有任何意義。在這種情況下編輯模板不是解決方案,您需要修復應用程序的邏輯。

+0

感謝您回答我的問題,但是,我沒有使用任何小數。該值是插入後返回的Id。數據庫(SQL 2005)將鍵定義爲Int,Subsonic activeRecord的ID屬性爲Integer,但在Sub SetKeyValue(Sub可以在上面的代碼中看到)中,該值是Decimal。 再一次,它插入記錄,當它返回新的ID(主鍵)時,發生異常。 這裏是我做在我的代碼: 用戶值=新BV.bv_Customer copyTextboxesToCust() Cust.Save() 任何提示我可能做錯了什麼? 謝謝 gm – 2010-02-10 03:41:24