SubSonic 3中的投射问题

时间:2010-02-05 20:16:56

标签: activerecord subsonic3

在VB版本中抛出以下异常时保存具有integere主键的行: 未找到'Decimal'类型的'公共成员'ChangeTypeTo'。'

这在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#>)()

感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:1)

我也遇到过VB模板的各种问题。这似乎是亚音速开发人员关注的重点是C#。最后,我选择在另一个项目中使用C#模板,并从我的VB主应用程序中引用它。您尝试进行的更改的问题在于您尝试将具体方法替换为通用方法,这不是更好。 <#=tbl.PK.SysType#>引用主键的类型。如果您只有整数主键,则可以将模板编辑为Dim settable = CInt(value)。否则,您需要GetType才能知道value的类型,然后需要select case来获取到达该方法的每种类型的适当转换。

答案 1 :(得分:0)

生成的代码是正确的。你试图将十进制值转换为整数,这没有任何意义。在这种情况下,编辑模板不是解决方案,您需要修复应用程序的逻辑。