Дозвуковая проблема VB.NET - PullRequest
1 голос
/ 12 июня 2009

Когда я использую VB.NET для использования дозвуковых, кажется, что есть проблемы с пометкой записей как старых и чистых. Всякий раз, когда я делаю запрос с использованием ExecuteSingle или ExecuteTypedList, мне нужно вручную MarkClean и MarkOld, иначе всякий раз, когда я сохраняю это, сохраняется как новая запись.

Я один сталкиваюсь с этой проблемой? Я использую SubSonic 2.2 кстати.

Ответы [ 3 ]

1 голос
/ 13 июня 2009

Я проверил исходный код SubSonic .. и обнаружил, что генератор классов VB не реализует IActiveRecord. Я думаю, что наиболее вероятно, потому что VB.Net, кажется, не поддерживает «повторную реализацию» наследования или как вы это называете ...

Поэтому, когда я отлаживаю, я обнаружил, что Utility.IsSubSonicType возвращает false (потому что класс ActiveRecord возвращается как IReadOnlyRecord, но IsSubSonicType проверяет IActiveRecord и IRecordBase) и, следовательно, не вызывает SetLoadState и MarkClean.

Так что я не уверен, является ли это ошибкой или преднамеренной. Есть ли способ решить эту проблему?

0 голосов
/ 15 июня 2009

Да, у меня была такая же проблема. MarkClean и MarkOld перед установкой свойств и сохранением устранили проблему. см.

0 голосов
/ 12 июня 2009

Когда вы используете ExecuteSingle или ExecuteTypedList, вы могли бы работать с классом, у которого не было этих свойств, я думаю, что вы собираетесь заполнять POCO, а не (обязательно) Entity или другой объект ORM.

ExecuteAsCollection и все методы .Load ведут себя так, как вы ожидаете, потому что они вызывают SetLoadState () и / или MarkClean ().

Лично я не сталкиваюсь с этой проблемой, потому что я использую Subsonic исключительно как (умный) DAL (только CRUD), а мой собственный слой сущности заботится о таких вещах, как грязный / новый.

...