Проблема кастинга в SubSonic 3 - PullRequest
       30

Проблема кастинга в SubSonic 3

0 голосов
/ 05 февраля 2010

При сохранении строки с целочисленным первичным ключом в версии VB выдается следующее исключение: 'Открытый член' 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 ]

1 голос
/ 10 февраля 2010

У меня также были различные проблемы с шаблонами VB. Кажется, что в центре внимания разработчиков Subsonic находится на C #. Наконец, я решил использовать шаблоны C # в другом проекте и ссылаться на него из моего основного приложения VB. Проблема с изменением, которое вы пытаетесь сделать, заключается в том, что вы пытаетесь заменить универсальный метод на конкретный, это не лучше. <#=tbl.PK.SysType#> указывает на тип первичного ключа. Если у вас есть только целочисленные первичные ключи, вы можете отредактировать шаблон как Dim settable = CInt(value). В противном случае вам нужен GetType, чтобы знать тип value, а затем select case с преобразованием апропиатов для каждого типа, который поступает в метод.

0 голосов
/ 09 февраля 2010

Сгенерированный код правильный. Вы пытаетесь преобразовать десятичное значение в целое число, это не имеет смысла. В этом случае редактирование шаблонов не является решением, вам нужно исправить логику вашего приложения.

...